Вызовите свойство набора данных в цикле foreach - PullRequest
1 голос
/ 26 марта 2012

У меня есть набор данных, который я хотел бы вызвать в цикле foreach, который является свойством.Я не хочу использовать .table ["xxx"]

public DataSet run(string query)
{ 
    SqlDataAdapter adapter = new SqlDataAdapter();
    adapter.SelectCommand = new SqlCommand(query, conn);
    adapter.Fill(dataset);
    return dataset;
}

string query = "select * from table";
foreach (DataRow row in  run(query))
{
//
}

Ответы [ 3 ]

2 голосов
/ 26 марта 2012

Это не точно , чего вы хотели избежать: по крайней мере, это числовой индекс.Но это заставляет меня задуматься, где объявлен ваш исходный набор данных.

foreach (DataRow row in  run(query).Tables[0].Rows)
{
   //
}

И просто предупреждаю: ваш метод run () является анти-паттерном.Я вижу, что многие люди хотят абстрагировать вызов базы данных от простого метода, который принимает строку, и они почти всегда забывают одну важную вещь: параметры запроса.Результатом является код, замкнутый по всему проекту, который использует конкатенацию строк для создания sql небезопасными способами.

2 голосов
/ 26 марта 2012

DataSet не имеет метода для возврата объектов DataRow.

Если вы не можете указать возвращаемое имя таблицы, вы можете использовать числовой индекс, например:

foreach (DataRow row in  run(query).Tables[0].Rows)
{
//
}

Если ваш запрос может вернуть более одной строки, вы должны выполнить цикл по всем таблицам следующим образом:

foreach(DataTable table in run(query).Tables)
{
    foreach(DataRow row in table.Rows)
    {
        foreach (DataColumn column in table.Columns)
        {
            //
        }
    }
}
2 голосов
/ 26 марта 2012

Вы должны использовать DataTable вместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...