Подтвердить что ты не робот

Как получить DataRow из текущей строки DataReader?

Хорошо, я хотел бы извлечь DataRow out a DataReader. Я довольно долго смотрю вокруг, и не похоже, что есть простой способ сделать это.

Я понимаю, что DataReader - это больше набор строк, но он только читает одну строку в то время.

Итак, мой вопрос: есть ли способ извлечь DataRow из текущей строки DataReader?

4b9b3361

Ответ 1

Есть ли способ извлечь DataRow из текущей строки DataReader?

Нет, по крайней мере, нет простого способа. Каждый DataRow принадлежит одному Table. Вы не можете оставить это свойство пустым, вы даже не можете изменить таблицу (без использования ImportRow).

Но если вам нужны DataRows, почему бы вам не заполнить DataTable в первую очередь?

DataTable table = new DataTable();
using(var con = new SqlConnection("...."))
using(var da = new SqlDataAdapter("SELECT ... WHERE...", con))
    da.Fill(table);
// now you have the row(s)

Если вам действительно нужно получить строки из DataReader, вы можете использовать reader.GetSchemaTable, чтобы получить всю информацию о столбцах:

if (reader.HasRows)
{
    DataTable schemaTable = reader.GetSchemaTable();
    DataTable data = new DataTable();
    foreach (DataRow row in schemaTable.Rows)
    {
        string colName = row.Field<string>("ColumnName");
        Type t = row.Field<Type>("DataType");
        data.Columns.Add(colName, t);
    }
    while (reader.Read())
    {
        var newRow = data.Rows.Add();
        foreach (DataColumn col in data.Columns)
        {
            newRow[col.ColumnName] = reader[col.ColumnName];
        }
    }
}

Но это не очень эффективно.

Ответ 2

Это не очевидно, но вот ваше решение получить только строку

CType(reader, IDataRecord)

может использовать следующее:

While reader.Read()
    CType(reader, IDataRecord)
End While