1

我必须用DataSet实现一个异步DB连接方法,所以我首先尝试使用SqlDataReader来填充DataSet。但这需要太多时间。

这是代码:

使用 DataTable.Load

DataSet ds = new DataSet();
using (SqlConnection conn = new SqlConnection(conString)
{
    SqlCommand cmd = new Sqlcommand(query, conn);
    conn.Open();
    SqlDataReader reader = cmd.ExecuteReader();

    while (!reader.IsClosed)
    {
        DataTable dt = new DataTable();
        dt.BeginLoadData();
        //////////////////////////////////////
        dt.Load(reader);     // takes too much
        //////////////////////////////////////
        dt.EndLoadData();
        ds.Tables.Add(dt);
    }
}

使用 SqlDataAdapter.Fill

DataSet ds = new DataSet();
using (SqlConnection conn = new SqlConnection(conString))
{
    ...
    SqlDataAdapter adapter = new SqlDataAdapter();
    adapter.SelectCommand = cmd;
    adapter.Fill(ds);
}

我认为这两种方法做的事情完全相同。但是当读取数据库中的 2400 行时,第一种方法平均需要 20 毫秒,否则第二种方法只需 7 毫秒。

有什么我错过的或代码错误的吗?

4

2 回答 2

1

我建议您使用SqlDataAdapter::Fill(DataSet)

DataSet ds = new DataSet();
ds.Clear();
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = cmd;
adapter.Fill(ds);
DataTable dt = ds.Tables[0];
于 2013-09-27T00:45:38.123 回答
0

尝试这个:

SqlDataReader reader = cmd.ExecuteReader();
DataTable dt = new DataTable();           
dt.Load(reader);             
ds.Tables.Add(dt);
于 2013-07-10T05:51:04.257 回答