各位帮忙看一下下面这段代码
下面这段代码在vs2003 下面运行没有错误,而在vs2005下面运行报错。
这句话“ myDataRow[i]= dataReader[i].ToString();”报“值类型与列类型不匹配不能在 DocID 列中存储 <312> 。所需类型是 DataRow。 --->
System.ArgumentException: 值类型与列类型不匹配”
/// 将DataReader 转为 DataTable
/// </summary>
/// <param name= "DataReader "> DataReader </param>
public static 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;
dataReader.Close();
return datatable;
}
catch(Exception ex)
{
Error.Log(ex.ToString());
throw new Exception( "转换出错出错! ",ex);
}
}
------解决方案--------------------myDataColumn.DataType= myRow.GetType();
问题出在这里吧??
myRow.GetType()是DataRow
------解决方案--------------------myDataColumn.DataType= myRow.GetType();这句错误
myRow.GetType()返回的是typeof(DataRow);
应该使用
myDataColumn.DataType= (Type)myRow[ "DataType "];