2012-02-01 115 views

回答

30

我知道这是旧的,但这里的答案似乎已经错过了有机磷农药的问题点。

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; 
} 

} 
+0

我想将datatable转换为datareader。 – user1049021 2012-02-01 06:29:07

0
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; 
} 
+0

仅供参考,DataTable.Loan(DataReader)可以做到这一点以及更多。特别是,当读者使用KeyInfo创建时。 – AMissico 2013-04-11 18:09:41

0

使用DataTable的构造函数,

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

好好看看!