Мне нужно реализовать асинхронный метод подключения БД к 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);
}
Я думаю, что эти два метода делают одно и то же. Но при чтении 2400 строк в БД первый метод занимает в среднем 20 мс, в противном случае второй - всего 7 мс.
Я что-то пропустил или код неверный?