Come faccio a fare riferimento a un elemento di DataRow per nome in un DataSet recuperato da SQL?

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

  •  21-08-2019
  •  | 
  •  

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();
}
È stato utile?

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"]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top