首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >与SqlDataAdapter.Fill()相比,DataTable.Load()占用的时间太长

与SqlDataAdapter.Fill()相比,DataTable.Load()占用的时间太长
EN

Stack Overflow用户
提问于 2013-07-10 05:48:39
回答 2查看 1.9K关注 0票数 1

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

代码如下:

使用DataTable.Load

代码语言:javascript
运行
AI代码解释
复制
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

代码语言:javascript
运行
AI代码解释
复制
DataSet ds = new DataSet();
using (SqlConnection conn = new SqlConnection(conString))
{
    ...
    SqlDataAdapter adapter = new SqlDataAdapter();
    adapter.SelectCommand = cmd;
    adapter.Fill(ds);
}

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

是我漏掉了什么,还是代码出错了?

EN

回答 2

Stack Overflow用户

发布于 2013-09-27 00:45:38

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

代码语言:javascript
运行
AI代码解释
复制
DataSet ds = new DataSet();
ds.Clear();
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = cmd;
adapter.Fill(ds);
DataTable dt = ds.Tables[0];
票数 1
EN

Stack Overflow用户

发布于 2013-07-10 05:51:04

试试这个:

代码语言:javascript
运行
AI代码解释
复制
SqlDataReader reader = cmd.ExecuteReader();
DataTable dt = new DataTable();           
dt.Load(reader);             
ds.Tables.Add(dt);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17563271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档