2010-12-11 15 views
4

mySqlDataReaderを使用して2つのテーブルを返し、結果を2つのデータテーブルにロードします。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(); 
       } 

ただし、これを実行すると、1つのgridViewだけが設定されます。この方法でNextResultを使用することはできますか?これを実現するにはより良い方法がありますか?事前に

おかげで、

ベン

+1

MS-SQLの場合、connectionStringにフラグ(MultipleActiveResultSets)が必要です。 MySqlプロバイダーのようなものは何ですか? –

+0

@HenkそのクエリはMARSを必要としません。テーブルは連続しています。 –

答えて

1

2回のロード呼び出しの間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); 
関連する問題