Como faço referência a um elemento DataRow pelo nome em um DataSet recuperado do SQL?

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

  •  21-08-2019
  •  | 
  •  

Pergunta

Então, eu estou construindo alguns XML usando um XmlWriter e uma DataSet mas quando chega a hora de percorrer cada DataRow na DataSet não consigo descobrir como fazer referência como "UserID" e tal que voltar a partir do procedimento armazenado . No código da página os vejo fazendo isso como Eval("userid") ou o que quer que eu estou usando o mesmo procedimento armazenado, mas eu estou usando-o em uma ASHX agora ... ver o 'O QUE VAI AQUI ??' no código abaixo ...

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

Solução

Em primeiro lugar, o seu foreach está errado. Você precisa loop sobre getData.Tables[0].Rows. Se há mais de uma tabela, você precisa varrer getData.Tables.

Mas, a resposta é que é uma propriedade indexada. Então, dr["userId"] você irá obter o valor.

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

Outras dicas

É bastante simples. Uma coluna inteira em sua datarow (dr) iria ser acessado com:

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

Seu foreach interior é a questão.

Deve ser

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

Você vai querer adicionar um nível iteração - você está actualmente a iteração sobre tabelas em seu foreach(DataRow dr in getData.Tables), os DataRow objetos estão um nível abaixo

.

Tente utilizar o DataRow.Item propriedade como mostrado abaixo

dr["userid"]
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top