Ответ 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];
}
}
}
Но это не очень эффективно.