Преобразование datatable в datareader

Для повышения производительности я хочу преобразовать datatable в datareader. Я не могу сделать это через запрос. Так есть ли другой способ сделать это?

Ответ 1

Я знаю, что это старо, но ответы здесь, похоже, пропустили точку вопроса OPs.

В DataTables есть метод CreateDataReader, который позволит вам преобразовать DataTable в DbDataReader. В этом случае DataTableReader.

DataTable table = new DataTable(); 
//Fill table with data 
//table = YourGetDataMethod(); 
DataTableReader reader = table.CreateDataReader();

Я должен указать, что это не повысит производительность, поскольку вы должны использовать тот или иной.

Вот еще несколько ресурсов по этому вопросу:

Ответ 2

например

public  DataTable ConvertDataReaderToDataTable(SqlDataReader dataReader)
{
DataTable datatable = new DataTable();
DataTable schemaTable = dataReader.GetSchemaTable();

try
{

foreach(DataRow myRow in schemaTable.Rows)
{
DataColumn myDataColumn = new DataColumn();
myDataColumn.DataType = myRow.GetType();
myDataColumn.ColumnName = myRow[0].ToString();
datatable.Columns.Add(myDataColumn);
}
while(dataReader.Read())
{
DataRow myDataRow = datatable.NewRow();
for(int i=0;i<schemaTable.Rows.Count;i++)
{
myDataRow[i] = dataReader[i].ToString();
}
datatable.Rows.Add(myDataRow);
myDataRow = null;
}
schemaTable = null;
return datatable;
}
catch(Exception ex)
{
Error.Log(ex.ToString());
return datatable;
}

}

Ответ 3

public   DataTable   GetTable(IDataReader   _reader) 
{ 
DataTable   dataTable1   =   _reader.GetSchemaTable(); 
DataTable   dataTable2   =   new   DataTable(); 
string[]   arrayList   =   new   string[dataTable1.Rows.Count]; 
for   (int   i   =   0;   i   <   dataTable1.Rows.Count;   i++) 
{ 
DataColumn   dataColumn   =   new   DataColumn(); 
if   (!dataTable2.Columns.Contains(dataTable1.Rows[i][ "ColumnName "].ToString())) 
{ 
dataColumn.ColumnName   =   dataTable1.Rows[i][ "ColumnName "].ToString(); 
dataColumn.Unique   =   Convert.ToBoolean(dataTable1.Rows[i][ "IsUnique "]); 
dataColumn.AllowDBNull   =   Convert.ToBoolean(dataTable1.Rows[i][ "AllowDBNull "]); 
dataColumn.ReadOnly   =   Convert.ToBoolean(dataTable1.Rows[i][ "IsReadOnly "]); 
dataColumn.DataType   =   (Type)dataTable1.Rows[i][ "DataType "]; 
arrayList[i]   =dataColumn.ColumnName; 
dataTable2.Columns.Add(dataColumn); 
} 
} 
dataTable2.BeginLoadData(); 
while   (_reader.Read()) 
{ 
DataRow   dataRow   =   dataTable2.NewRow(); 
for   (int   j   =   0;   j   <   arrayList.Length   ;   j++) 
{ 
dataRow[arrayList[j]]   =   _reader[arrayList[j]]; 
} 
dataTable2.Rows.Add(dataRow); 
} 
_reader.Close(); 
dataTable2.EndLoadData(); 
return   dataTable2; 
} 

Ответ 4

Использовать конструктор DataTable,

DataTable table = new DataTable(); 
//Fill table with data 
DataTableReader reader = new DataTableReader(table);

Хороший взгляд!