How to get a DataRow out the current row of a DataReader?
c#, datareader, datarow
Solution
Is there any way to extract a DataRow out the current row of a DataReader ?
No, at least no simple way. Every DataRow belongs to one Table. You cannot leave that property empty, you cannot even change the table(without using ImportRow).
But if you need DataRows, why don't you fill a `DataTable` in the first place?
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)
If you really need to get the row(s) from the `DataReader` you can use `reader.GetSchemaTable` to get all informations about the columns:
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];
}
}
}
But that is not really efficient.
Problem
Ok, I would like to extract a `DataRow` out a `DataReader`. I have been looking around for quite some time and it doesn't look like there is a simple way to do this. I understand a `DataReader` is more a collection of rows but it only read one row at the time. So my question: is there any way to extract a `DataRow` out the current row of a `DataReader`?