2010-12-11 36 views
4

我想使用mySqlDataReader返回兩個表並將結果加載到兩個數據表中。如何使用MySqlDataReader返回多個表?

using (MySqlConnection connMySql = new MySqlConnection(global.g_connString)) 
      { 
       MySqlCommand cmd = connMySql.CreateCommand(); 
       cmd.CommandText = @" 
            SELECT * FROM table1; 
            SELECT * FROM table2; 
            "; 
       connMySql.Open(); 
       using (MySqlDataReader dr = cmd.ExecuteReader()) 
       { 
         DataTable dt1 = new DataTable(); 
         dt1.Load(dr); 
         dr.NextResult(); 
         DataTable dt2 = new DataTable(); 
         dt2.Load(dr); 

         gridView1.DataSource = dt1; 
         gridView1.DataBind(); 
         gridView2.DataSource = dt2; 
         gridView2.DataBind(); 
       } 

但是,當我運行這個,只有一個gridView被填充。我能以這種方式使用NextResult,還是有更好的方法來實現這一目標?

由於提前,

+1

對於MS-SQL,您需要在connectionString中有一個標誌(MultipleActiveResultSets)。任何像MySql提供程序那樣的東西? – 2010-12-11 16:41:58

+0

@亨克那個查詢不需要MARS;這些表是連續的。 – 2010-12-11 17:18:05

回答

1

不要將兩個負載調用之間調用dr.NextResult()。讀者已經進入下一個結果集。

來自MSDN:Load方法從加載的IDataReader中消耗第一個結果集,成功完成後,將讀取器的位置設置爲下一個結果集(如果有)。

史蒂芬

[編輯]

檢查dr.NextResult的結果()也將使其更容易發現什麼在你的代碼完全發生。

2

而不是使用了MySqlDataReader,你可以返回就像一個DataSet:

  connMySql.Open(); 

      MySqlCommand cmd = new MySqlCommand(SQL, connMySql); 
      DataSet ds = new DataSet(); 
      MySqlDataAdapter objDataAdapter = new MySqlDataAdapter(cmd); 
      objDataAdapter.Fill(ds, "reading"); 
      connMySql.Close(); 

      // Each SQL statement result set 
      // will be in a DataTable in the DataSet 
      gridView1.DataSource = ds.Tables[0]; 
      gridView1.DataBind(); 
      gridView2.DataSource = ds.Tables[1]; 
      gridView2.DataBind(); 

希望有所幫助。僅供參考,您可以以這種方式交替返回數據集:

DataSet ds = MySql.Data.MySqlClient.MySqlHelper.ExecuteDataset(oConn, SQL);