datatable.load跳过到多元学位数据标准中的下一个结果设置



我有一个多结果查询,并试图将每个结果绑定到单独的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();
}

如果我不将数据加载到数据表中并且不将其绑定到网格中,我将获得6个结果集,但是在上面的代码中,我继续; y是第一个,第三和第五结果集,看起来像是填充跳过的Skips a结果设置为每个循环。

问题是:

  1. 为什么会发生这种情况。
  2. 实现此目标的最简单解决方案是什么。

datatable.load,前进到下一个结果集,因此您无需使用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();
}

使用read.isclosed((的答案不是错误的,但要当心:

当所有选择中的字段数量不相同时,似乎存在问题(也是相同的数据类型(:

例如1:

    select 2,2 select 1

例如2:

    select 2,2 select 'one', 'one'

(用.NET 4.5.2测试(

最新更新