mysql 如何在单个my sql连接上运行多个数据读取器

h4cxqtbf  于 2022-12-17  发布在  Mysql
关注(0)|答案(3)|浏览(135)
MySqlConnection con = GetConnection();
            string sql = "SELECT COUNT(ID) FROM booking WHERE DATE(Booking_Date) = CURDATE()";
            string sql2 = "SELECT SUM(Fare) FROM booking WHERE DATE(Booking_Date) = CURDATE()";
            MySqlCommand cmd = new MySqlCommand(sql, con);
            cmd.CommandType = System.Data.CommandType.Text;
            MySqlDataReader BookingToday = cmd.ExecuteReader();
            while (BookingToday.Read())
            {
                label6.Text = BookingToday.GetValue(0).ToString();
            }

这是我的C#代码,我想运行两个给定的查询,以获得结果一次。但我不知道如何运行多个数据读取器在一个连接或运行2个连接一次。任何人都请帮助我在这方面

3pmvbmvn

3pmvbmvn1#

可以使用一个查询:

string sql = "SELECT COUNT(ID), SUM(Fare) FROM booking WHERE DATE(Booking_Date) = CURDATE()";
mlnl4t2r

mlnl4t2r2#

在此特定情况下:您不需要这样做-您可以使用slaakso答案中显示的代码在一个查询中执行两个聚合。
在更一般的情况下:

using (var reader = cmd1.ExecuteReader())
{
  // while .Read(), etc
}
using (var reader = cmd2.ExecuteReader())
{
  // while .Read(), etc
}

即按顺序且不重叠(除非您的提供商支持“MARS”的等效功能)。
您还可以经常在单个命令中发出多个查询(select);使用NextResult()在它们之间移动:

using (var reader = cmd.ExecuteReader())
{
  // while .Read(), etc, first grid
  if (reader.NextResult())
  {
    // while .Read(), etc, second grid
  }
}
yvfmudvl

yvfmudvl3#

不能从单个连接同时打开多个数据读取器。
如果需要单个结果,可以使用ExecuteScalar。

var result1 = (DateTime)new MySqlCommand("select now()", con).ExecuteScalar();
Console.WriteLine(result1);

var result2 = (DateTime)new MySqlCommand("select date_add(now(), interval 10 day)", con).ExecuteScalar();
Console.WriteLine(result2);

对于多行结果,可以将其存储在DataTable中。

var dt1 = new DataTable();
dt1.Load(new MySqlCommand("select id from table1", con).ExecuteReader());

var dt2 = new DataTable();
dt2.Load(new MySqlCommand("select name from table1", con).ExecuteReader());

foreach(var row in dt1.AsEnumerable())
{
    Console.WriteLine($"id:{row["id"]}");
}

foreach (var row in dt2.AsEnumerable())
{
    Console.WriteLine($"name:{row["name"]}");
}

相关问题