我想使用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,还是有更好的方法来实现这个目标?
提前致谢,
本
答案 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()的结果还可以更容易地检测代码中发生的最新情况。