日期:2014-05-19  浏览次数:20877 次

各位帮忙看一下下面这段代码
下面这段代码在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 "];