объект DataTable.Загрузка переходит к следующему результирующему набору в средстве чтения данных с несколькими результатами
У меня есть запрос с несколькими результатами, и я пытаюсь привязать каждый результат к отдельному DataGridView.
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
SqlCommand cmd = new SqlCommand("SELECT 1 select 2 select 3 select 4 select 5 select 6"
, con);
SqlDataReader reader = cmd.ExecuteReader();
int x = 50;
int y = 100;
do
{
DataGridView dgv1 = new DataGridView();
DataTable dt = new DataTable();
dt.Load(reader);
dgv1.DataSource = dt;
dgv1.Left = x;
dgv1.Top = y;
dgv1.Height = 60;
y = y + 70;
this.Controls.Add(dgv1);
} while (reader.NextResult());
reader.Close();
}
Если я не загружаю данные в DataTable и не привязываю их к сетке, я получу 6 результирующих наборов, но в коде выше я получаю;y 1-й, 3-й и 5-й результирующие наборы, похоже, что заполнение пропускает результирующий набор в каждом цикле.
Вопрос таков:
- Почему это происходит. Какое самое простое решение для достижения этой цели?
2 ответа:
DataTable.Загрузка, переход к следующему результирующему набору, поэтому вам не нужно использовать NextResult().
Просто делайте цикл, пока читатель не будет открыт.
using (SqlConnection con = new SqlConnection(connectionString)) { con.Open(); SqlCommand cmd = new SqlCommand("SELECT 1 select 2 select 3 select 4 select 5 select 6" , con); SqlDataReader reader = cmd.ExecuteReader(); int x = 50; int y = 100; do { DataGridView dgv1 = new DataGridView(); DataTable dt = new DataTable(); dt.Load(reader); dgv1.DataSource = dt; dgv1.Left = x; dgv1.Top = y; dgv1.Height = 60; y = y + 70; this.Controls.Add(dgv1); } while (!reader.IsClosed); // here is the change reader.Close(); }