2012-02-01 44 views

Trả lời

30

Tôi biết điều này là cũ, nhưng câu trả lời ở đây dường như đã bị mất điểm của câu hỏi Ops.

DataTables có phương thức được gọi là CreateDataReader, cho phép bạn chuyển đổi DataTable thành đối tượng DbDataReader. Trong trường hợp này là DataTableReader.

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

Tôi nên chỉ ra rằng điều này sẽ không làm tăng hiệu suất vì bạn nên sử dụng cái này hoặc cái kia.

Dưới đây là một số tài nguyên hơn về vấn đề này:

2

ví dụ

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

Tôi muốn chuyển đổi dữ liệu thành 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) thực hiện điều này và hơn thế nữa. Đặc biệt, khi người đọc được tạo ra với KeyInfo. – AMissico

0

Sử dụng constructor DataTable,

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

Tốt Look!

Các vấn đề liên quan