2012-02-01 19 views

Odpowiedz

30

wiem, że to jest stary, ale tutaj odpowiedzi wydaje się, że brakowało punkt pytanie OPS.

DataTables mają metodę o nazwie CreateDataReader, która pozwoli konwertować DataTable na obiekt DbDataReader. W tym przypadku jest to DataTableReader.

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

Muszę zaznaczyć, że nie zwiększy to wydajności, ponieważ powinno się używać jednego z nich.

Oto kilka zasobów w tej sprawie:

2

np

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

Chcę przekonwertować datatable na datareader. – user1049021

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

FYI, DataTable.Loan (DataReader) robi to i wiele więcej. Szczególnie, gdy czytelnik został stworzony za pomocą KeyInfo. – AMissico

0

Zastosowanie DataTable konstruktor,

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

szansą!