Wie verweisen ich ein DataRow Element von Namen in einem Datensatz von SQL abgerufen?
Frage
So baue mir einige XML mit einem XmlWriter
und DataSet
aber wenn es an der Zeit zu Schleife durch jede DataRow
im DataSet
kommt, kann ich nicht herausfinden, wie Bezug tun wie „Benutzer-ID“ und solche, die wieder aus der gespeicherten Prozedur kommen . In Seite Code sehe ich sie als Eval("userid")
tun oder was auch immer, das ich die gleiche gespeicherte Prozedur bin, aber ich bin mit ihm in einem ASHX jetzt ... siehe das ‚WAS GEHT HIER ??‘ in dem Code unten ...
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();
}
Lösung
Zunächst einmal, Ihre foreach ist falsch. Sie müssen eine Schleife über getData.Tables[0].Rows
. Wenn es mehr als 1 Tisch ist, müssen Sie eine Schleife über getData.Tables.
Aber die Antwort ist, es ist eine indizierte Eigenschaft. Also, dr["userId"]
werden Sie den Wert erhalten.
foreach (DataRow dr in getData.Tables[0].Rows) {
/ * blah, blah */
writer.WriteAttributeString("userId", dr["userId"]);
}
Andere Tipps
Es ist ziemlich einfach. Eine Integer-Spalte in Ihrer datarow (dr) zugegriffen werden würde mit:
int someVal = (int)dr["ColumnName"];
Ihre innere foreach ist das Problem.
sollte
if(getData.Tables.Count > 0){
foreach(DataRow dr in getData.Tables[0].Rows){
writer.WriteAttributeString("userid", dr["UserID"]);
}
}
Sie gehen zu wollen, eine Iteration Ebene hinzuzufügen - Sie derzeit über Tabellen in Ihrem foreach(DataRow dr in getData.Tables)
sind Iterieren sind die DataRow-Objekte eine Ebene unter
Versuchen Sie die DataRow.Item Property wie unten
dr["userid"]