Comment puis-je référencer un élément DataRow par nom dans un DataSet récupéré à partir de SQL?
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();
}
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"]