Как мне обратиться к элементу DataRow по имени в DataSet, полученном из SQL? - PullRequest
0 голосов
/ 23 марта 2009

Итак, я создаю некоторый XML с использованием XmlWriter и DataSet, но когда приходит время перебирать каждый DataRow в DataSet, я не могу понять, как сделать ссылку, такую ​​как «идентификатор пользователя» и такие, которые возвращаются из хранимой процедуры. В коде страницы я вижу, что они делают это как Eval("userid") или что-то еще, что я использую той же хранимой процедурой, но сейчас я использую ее в ASHX ... см. "ЧТО ЗДЕСЬ ЗДЕСЬ ??" в коде ниже ...

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();
}

Ответы [ 5 ]

0 голосов
/ 23 марта 2009

Вы захотите добавить уровень итерации - вы в настоящее время перебираете таблицы в ваших foreach(DataRow dr in getData.Tables), объекты DataRow находятся на один уровень ниже.

0 голосов
/ 23 марта 2009

Ваш внутренний foreach - это проблема.

Должно быть

if(getData.Tables.Count > 0){
   foreach(DataRow dr in getData.Tables[0].Rows){
      writer.WriteAttributeString("userid", dr["UserID"]);
   }
}
0 голосов
/ 23 марта 2009

Это довольно просто. Целочисленный столбец в вашем datarow (dr) будет доступен с помощью:

int someVal = (int)dr["ColumnName"];
0 голосов
/ 23 марта 2009

Во-первых, ваш foreach неправильный. Вам нужно перебрать getData.Tables[0].Rows. Если существует более 1 таблицы, вам нужно перебрать getData.Tables.

Но ответ таков: это индексированное свойство. Итак, dr["userId"] даст вам значение.

foreach (DataRow dr in getData.Tables[0].Rows) {
   / * blah, blah */
   writer.WriteAttributeString("userId", dr["userId"]);
}
0 голосов
/ 23 марта 2009

Попробуйте использовать свойство DataRow.Item , как показано ниже

dr["userid"]
...