如何使用MySqlDataReader返回多个表?

时间:2010-12-11 16:33:55

标签: c# asp.net mysql

我想使用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,还是有更好的方法来实现这个目标?

提前致谢,

2 个答案:

答案 0 :(得分:2)

您可以返回一个DataSet,而不是使用MySqlDataReader:

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

答案 1 :(得分:1)

不要在两个Load调用之间调用dr.NextResult()。读者已经进入下一个结果集。

从MSDN:Load方法使用加载的IDataReader中的第一个结果集,并在成功完成后,将读者的位置设置为下一个结果集(如果有)。

史蒂芬

[编辑]

检查dr.NextResult()的结果还可以更容易地检测代码中发生的最新情况。