Wie verweisen ich ein DataRow Element von Namen in einem Datensatz von SQL abgerufen?

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

  •  21-08-2019
  •  | 
  •  

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();
}
War es hilfreich?

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"]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top