Comment puis-je référencer un élément DataRow par nom dans un DataSet récupéré à partir de SQL?

StackOverflow https://stackoverflow.com/questions/675133

  •  21-08-2019
  •  | 
  •  

Question

Je suis la construction du XML en utilisant un et un XmlWriter mais quand il DataSet vient le temps de boucle à travers chaque DataRow dans le je ne peux pas Eval("userid") comprendre comment faire référence comme « userid » et de telle sorte que revenir de la procédure stockée. Dans le code de la page que je les vois faire ou quoi que <=> que je suis en utilisant la même procédure stockée, mais je l'utilise dans un ASHX maintenant ... voir le « QU'EST-CE QUE ICI ?? GOES » dans le code ci-dessous ...

DataSet getData;
getData = SqlHelper.ExecuteDataset(ConfigurationManager.ConnectionStrings["connstr"].ConnectionString, CommandType.StoredProcedure, "Course_NewReportGet_Get_Sav", objPAra)

//COUNT NUMBER OF RESULTS FOR COUNT ATTRIBUTE (must add!)

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = ("    ");
using(XmlWriter writer = XmlWriter.Create("data.xml", settings))
{
    writer.WriteStartElement("changes");
    writer.WriteAttributeString("clientname", foundCompany.CompanyName);
    writer.WriteAttributeString("clientid", foundCompany.Abbreviation);
    //writer... INSERT COUNT ATTRIBUTE

    foreach(DataRow dr in getData.Tables)
    {
        writer.WriteStartElement("change");
        writer.WriteStartElement("user");
        writer.WriteAttributeString("userid", dr... WHAT GOES HERE??;                    
    }                
    writer.WriteEndElement();
}
Était-ce utile?

La solution

Tout d'abord, votre foreach est faux. Vous devez faire une boucle sur getData.Tables[0].Rows. S'il y a plus de 1 table, vous devez faire une boucle sur getData.Tables.

Mais, la réponse est que c'est une propriété indexée. Alors, vous obtiendrez dr["userId"] la valeur.

foreach (DataRow dr in getData.Tables[0].Rows) {
   / * blah, blah */
   writer.WriteAttributeString("userId", dr["userId"]);
}

Autres conseils

Il est assez simple. Une colonne entière dans votre datarow (dr) sera accessible avec:

int someVal = (int)dr["ColumnName"];

Votre foreach intérieur est la question.

doit être

if(getData.Tables.Count > 0){
   foreach(DataRow dr in getData.Tables[0].Rows){
      writer.WriteAttributeString("userid", dr["UserID"]);
   }
}

Vous allez vouloir ajouter un niveau d'itération - nous parcourons actuellement sur les tables dans votre foreach(DataRow dr in getData.Tables), les objets DataRow sont un niveau au-dessous

.

Essayez d'utiliser le DataRow.Item propriété comme indiqué ci-dessous

dr["userid"]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top