下面这种写法总出问题,请赐教 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[1] = 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.   

    换成这个就行了
    DataTable  ConvertDataReaderToDataTalbe(IDataReader  reader)
    {
    DataTable  table  =  new  DataTable();
    for(int  i  =  0;  i  <  reader.FieldCount;  i++)
    {
    table.Columns.Add(reader.GetName(i),  reader.GetFieldType(i))
    }table.BeginLoadData();
    object[]  values  =  new  object[reader.FieldCount  -  1];
    while(reader.Read())
    {
    reader.Getvalues(values);
                      table.LoadDataRow(values,  True);
    }
    reader.close();
    table.EndLoadData();
    return  table;
    }
      

  2.   

    public static DataTable ConvertDataReaderToDataTalbe(IDataReader  reader)
    {
    DataTable  table  =  new  DataTable();
    for(int  i  =  0;  i  <  reader.FieldCount;  i++)
    {
        table.Columns.Add(reader.GetName(i), reader.GetFieldType(i));
    }table.BeginLoadData();
    object[]  values  =  new  object[reader.FieldCount  -  1];
    while(reader.Read())
    {
    reader.GetValues(values);
                      table.LoadDataRow(values,  true);
    }
    reader.Close();
    table.EndLoadData();
    return  table;
    }
      

  3.   

    DataSourceSelectArguments selresult = new DataSourceSelectArguments();
                SqlDataSource1.DataSourceMode = SqlDataSourceMode.DataReader;
                IDataReader resultRead= (IDataReader)SqlDataSource1.Select(selresult);************************************************************************************
      SqlDataSource1.DataSourceMode = SqlDataSourceMode.DataSet;
                DataSourceSelectArguments topid = new DataSourceSelectArguments();
                DataView dv = (DataView)oracledata.Select(topid);