VS2005下 DataReader 转为 DataTable 遇到困难 解决即揭贴
///定义DataTable和模式
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];
}
datatable.Rows.Add(myDataRow);
myDataRow = null;
}
schemaTable = null;
///关闭数据读取器
dataReader.Close();
return datatable;
}
catch (Exception ex)
{
///抛出类型转换错误
SystemError.SystemLog(ex.Message);
throw new Exception(ex.Message, ex);
}
在VS2005下,转化的时候出现错误:
"值类型与列类型不匹配不能在 ? 列中存储 <?> 。所需类型是 DataRow。 "
望解答,解决就揭贴,谢谢大家了
[解决办法]
http://community.csdn.net/Expert/topic/5535/5535462.xml?temp=.8925287
对于 ADO.NET 2.0 中的 DataSet 和 DataTable 类的另一个主要增强是,提供了用来消耗 DataReader(将数据加载到 DataTable 中)以及在 DataTable 的内容之上公开 DataReader 的机制。
有时,我们具有(或收到)DataReader 形式的数据,但实际上是希望具有缓存 DataTable 形式的数据。通过新增的 Load 方法,我们可以获得现有的 DataReader,并使用它的内容来填充 DataTable。
有时,我们具有(或收到)缓存形式的数据 (DataTable),并且需要通过 DataReader 类型接口来访问它。通过新增的 GetTableReader 方法,我们可以获得现有的 DataTable,并通过 DataReader 接口和语义来访问它。
在下面的部分中,我们将考察一下这些新方法。
Load 方法 — 基本用法
Load 方法是已经添加到 ADO.NET 2.0 的 DataSet 和 DataTable 中的一个新方法。它用 DataReader 对象的内容加载 DataTable。如果 DataReader 包含多个结果集,则它实际上可以一次加载多个表。
Load 方法的基本用法非常简单:
MyDataTable.Load (MyDataReader)