我必须用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行时,第一种方法平均需要20ms,否则第二种方法只需要7ms。
是我漏掉了什么,还是代码出错了?
发布于 2013-09-27 00:45:38
我建议您使用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-07-10 05:51:04
试试这个:
SqlDataReader reader = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(reader);
ds.Tables.Add(dt);
https://stackoverflow.com/questions/17563271
复制相似问题