2017-05-02 53 views
2

我有一個多結果查詢,並試圖將每個結果綁定到單獨的DataGridView。DataTable.Load跳到多結果數據讀取器中的下一個結果集

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中的第一,第三和第五的結果集,看上去像填充一樣跳過每個循環中的結果集。

問題是:

  1. 爲什麼發生這種情況。
  2. 實現此目標的最簡單解決方案是什麼?
+2

'DataTable.Load'自動將讀取器提前到下一個結果。 –

回答

3

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(); 
}