2010-12-11 7 views
4

Je veux retourner deux tables en utilisant un mySqlDataReader et charger les résultats dans deux datatables.Comment retourner plusieurs tables en utilisant 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(); 
       } 

Cependant, lorsque je l'exécute, un seul gridView est rempli. Puis-je utiliser NextResult de cette manière, ou existe-t-il un meilleur moyen d'y parvenir?

Merci à l'avance,

Ben

+1

Pour MS-SQL vous avez besoin d'un drapeau (MultipleActiveResultSets) dans le connectionString. Quelque chose comme ça pour le fournisseur MySql? –

+0

@Henk cette requête n'a pas besoin de MARS; les tables sont séquentielles. –

Répondre

1

Ne pas appeler dr.NextResult() entre les deux appels de charge. Le lecteur est déjà avancé au jeu de résultats suivant.

De MSDN: La méthode Load consomme le premier jeu de résultats à partir de l'IDataReader chargé et, après avoir terminé avec succès, définit la position du lecteur sur l'ensemble de résultats suivant, le cas échéant.

Steven

[modifier]

Vérification du résultat de dr.NextResult() sera également plus facile de détecter ce qu'il se passe exactement dans votre code.

2

Plutôt que d'utiliser MySqlDataReader, vous pourriez retourner un DataSet comme:

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

espoir qui aide. Pour votre information, vous pouvez revenir à tour un ensemble de données de cette façon:

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