2012-02-01 13 views

Respuesta

30

Sé que esto es viejo, pero las respuestas aquí parece que han perdido el punto de la cuestión PO.

Las tablas de datos tienen un método llamado CreateDataReader que le permitirá convertir una DataTable a un objeto DbDataReader. En este caso, un DataTableReader.

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

Debo señalar que esto no aumentará el rendimiento, ya que debe utilizar uno u otro.

Éstos son algunos más recursos en la materia:

2

por ejemplo

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

Quiero convertir datatable a 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) hace esto y mucho más. Especialmente, cuando el lector fue creado con KeyInfo. – AMissico

0

Uso constructor DataTable,

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

buena mirada!

Cuestiones relacionadas