如何从DataReader的当前行中获取DataRow?

Rém*_*émi 21 c# datareader datarow

好的,我想提取DataRow一个DataReader.我一直在寻找相当长的一段时间,看起来没有一种简单的方法可以做到这一点.

我理解a DataReader更多是行的集合,但它当时只读取一行.

所以我的问题是:有没有办法提取DataRow出当前的一行DataReader

Tim*_*ter 26

有没有办法从DataReader的当前行中提取DataRow?

不,至少没有简单的方法.每个DataRow都属于一个.您不能将该属性留空,甚至无法更改表(不使用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)
Run Code Online (Sandbox Code Playgroud)

如果你真的需要从中获取行,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];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但这并不是真正有效的.