我必须使用DataSet实现异步数据库连接方法,所以首先我尝试使用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);
}
我认为这两种方法完全相同。但是当在DB中读取2400行时,第一种方法平均需要20ms,否则第二种方法只需要7ms。
我有什么遗漏或代码错了吗?
答案 0 :(得分: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];
答案 1 :(得分:0)
试试这个:
SqlDataReader reader = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(reader);
ds.Tables.Add(dt);