¿Cómo hago referencia a un objeto DataRow elemento por su nombre en un conjunto de datos obtenido de SQL?

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

  •  21-08-2019
  •  | 
  •  

Pregunta

Así que estoy construyendo algo de XML usando un XmlWriter y un DataSet pero cuando se trata de tiempo para recorrer cada uno de los DataRow en el DataSet Yo no puedo entender cómo hacer referencia como "userid", y esos que vienen de vuelta del procedimiento almacenado.En el código de la página que veo como Eval("userid") o lo que sea que estoy utilizando el mismo procedimiento almacenado, pero la estoy usando en un ASHX ahora...ver el '¿QUÉ PASA AQUÍ??' en el siguiente código...

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();
}
¿Fue útil?

Solución

En primer lugar, el foreach es erróneo. Es necesario para recorrer getData.Tables[0].Rows. Si hay más de 1 mesa, es necesario un bucle sobre getData.Tables.

Sin embargo, la respuesta es que es una propiedad indexada. Así, dr["userId"] le dará el valor.

foreach (DataRow dr in getData.Tables[0].Rows) {
   / * blah, blah */
   writer.WriteAttributeString("userId", dr["userId"]);
}

Otros consejos

Es bastante sencillo. Una columna de número entero en su DataRow (dr) se accede con:

int someVal = (int)dr["ColumnName"];

Su foreach interior es el problema.

En caso de ser

if(getData.Tables.Count > 0){
   foreach(DataRow dr in getData.Tables[0].Rows){
      writer.WriteAttributeString("userid", dr["UserID"]);
   }
}

Vas a querer añadir un nivel de iteración - que está iterando sobre las tablas actualmente en su foreach(DataRow dr in getData.Tables), los objetos DataRow están por debajo de un nivel

.

Trate de usar la DataRow.Item propiedad como se muestra a continuación

dr["userid"]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top