Как мне ссылаться на элемент DataRow по имени в наборе данных, полученном из SQL?

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

  •  21-08-2019
  •  | 
  •  

Вопрос

Итак, я создаю некоторый XML, используя XmlWriter и a DataSet но когда приходит время перебирать каждый DataRow в DataSet Я не могу понять, как сделать ссылку типа "userid" и такую, которая возвращается из хранимой процедуры.В коде страницы я вижу, что они делают это следующим образом 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();
}
Это было полезно?

Решение

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

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

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

Другие советы

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

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

Проблема в вашем внутреннем foreach.

Должно быть

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

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

Попробуйте использовать Поток данных.Элемент Свойство, как показано ниже

dr["userid"]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top