Come faccio a fare riferimento a un elemento di DataRow per nome in un DataSet recuperato da SQL?
Domanda
Quindi, sto costruendo un po 'XML utilizzando un XmlWriter
e un DataSet
ma quando arriva il momento di ciclo attraverso ogni DataRow
nel Eval("userid")
io non riesco a capire come fare riferimento come "userid" e in modo tale che torna dalla stored procedure. Nel codice della pagina li vedo farlo come <=> o qualsiasi altra cosa che sto usando la stessa stored procedure, ma io sto usando in un ASHX ora ... vedere il 'che cosa va QUI ??' nel seguente codice ...
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();
}
Soluzione
Prima di tutto, il tuo foreach è sbagliato. Hai bisogno di un ciclo su getData.Tables[0].Rows
. Se c'è più di 1 tavolo, è necessario eseguire un ciclo su getData.Tables.
Ma, la risposta è si tratta di una proprietà indicizzata. Così, dr["userId"]
ti porterà il valore.
foreach (DataRow dr in getData.Tables[0].Rows) {
/ * blah, blah */
writer.WriteAttributeString("userId", dr["userId"]);
}
Altri suggerimenti
E 'piuttosto semplice. Una colonna integer nel datarow (dr) sarebbe possibile accedere con:
int someVal = (int)dr["ColumnName"];
Il tuo foreach interiore è il problema.
Dovrebbe essere
if(getData.Tables.Count > 0){
foreach(DataRow dr in getData.Tables[0].Rows){
writer.WriteAttributeString("userid", dr["UserID"]);
}
}
Si sta andando a voler aggiungere un livello di iterazione - si sta iterazione di tabelle nel foreach(DataRow dr in getData.Tables)
, gli oggetti DataRow sono un livello sotto
Provare a utilizzare il DataRow.Item immobili come illustrato di seguito
dr["userid"]