C# 将数据表转换为数据读取器

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/9091255/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-09 05:52:11  来源:igfitidea点击:

Convert datatable to datareader

c#ado.net

提问by user1049021

For Performance improvement I want to convert datatable to datareader. I can not do that through query. So is there any other way to do so?

为了提高性能,我想将数据表转换为数据读取器。我不能通过查询做到这一点。那么有没有其他方法可以做到这一点?

采纳答案by Brandon Boone

I know this is old, but the answers here seem to have missed the point of the OPs question.

我知道这很旧,但这里的答案似乎没有抓住 OP 问题的重点。

DataTables have a method called CreateDataReaderwhich will allow you to convert a DataTable to a DbDataReaderobject. In this case a DataTableReader.

DataTables 有一个名为CreateDataReader的方法,它允许您将 DataTable 转换为DbDataReader对象。在本例中为DataTableReader

DataTable table = new DataTable(); 
//Fill table with data 
//table = YourGetDataMethod(); 
DataTableReader reader = table.CreateDataReader();

I should point out that this will not increase performance since you should be using one or the other.

我应该指出,这不会提高性能,因为您应该使用其中一种。

Here are some more resources on the matter:

以下是有关此问题的更多资源:

回答by zhaixiaohu

For example

例如

public 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;
        return datatable;
    }
    catch (Exception ex)
    {
        Error.Log(ex.ToString());
        return datatable;
    }
}

回答by zhaixiaohu

public DataTable GetTable(IDataReader _reader)
{
    DataTable dataTable1 = _reader.GetSchemaTable();
    DataTable dataTable2 = new DataTable();
    string[] arrayList = new string[dataTable1.Rows.Count];
    for (int i = 0; i < dataTable1.Rows.Count; i++)
    {
        DataColumn dataColumn = new DataColumn();
        if (!dataTable2.Columns.Contains(dataTable1.Rows[i]["ColumnName "].ToString()))
        {
            dataColumn.ColumnName = dataTable1.Rows[i]["ColumnName "].ToString();
            dataColumn.Unique = Convert.ToBoolean(dataTable1.Rows[i]["IsUnique "]);
            dataColumn.AllowDBNull = Convert.ToBoolean(dataTable1.Rows[i]["AllowDBNull "]);
            dataColumn.ReadOnly = Convert.ToBoolean(dataTable1.Rows[i]["IsReadOnly "]);
            dataColumn.DataType = (Type)dataTable1.Rows[i]["DataType "];
            arrayList[i] = dataColumn.ColumnName;
            dataTable2.Columns.Add(dataColumn);
        }
    }
    dataTable2.BeginLoadData();
    while (_reader.Read())
    {
        DataRow dataRow = dataTable2.NewRow();
        for (int j = 0; j < arrayList.Length; j++)
        {
            dataRow[arrayList[j]] = _reader[arrayList[j]];
        }
        dataTable2.Rows.Add(dataRow);
    }
    _reader.Close();
    dataTable2.EndLoadData();
    return dataTable2;
}

回答by Locoucla

Use DataTable constructor,

使用 DataTable 构造函数,

DataTable table = new DataTable(); 
//Fill table with data 
DataTableReader reader = new DataTableReader(table);

Good Look!

好看!