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);
}

}
看看这段代码有错吗?

解决方案 »

  1.   

    myDataColumn.DataType = myRow.GetType(); ??
    楼主是要实现行变列,列变行?那么,新的列名属性就不好说了,建议空着。
    其他没看出来。
      

  2.   

    哎,不清楚要干什么,但是DataTable schemaTable =dataReader.GetSchemaTable(),然后再取schemaTable的rows就是有问题的,它的功能是Returns a System.Data.DataTable that describes the column metadata of the System.Data.SqlClient.SqlDataReader. 返回值是A System.Data.DataTable that describes the column metadata.,是一个空表,rows=0的!
      

  3.   

    不太清楚datareader的用法,但感觉你的循环复制数据有问题,
    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;
    }
    这里应该为k=0;
    while(dataReader.Read())
    {
    DataRow myDataRow = datatable.NewRow();
    for(int i=0;i<schemaTable.Rows.Count;i++)
    {
    myDataRow[i] = dataReader[k].ToString(); k++;
    }
    datatable.Rows.Add(myDataRow);
    myDataRow = null;
    }