C#中的多个SQL查询

Hug*_*ugo 0 c#

我很难弄清楚如何在C#中获得更多的SQL查询。我有这样的事情:

breakControlq.CommandText = 
            @"SELECT something as q1 From table" +
            "SELECT somethingelse as q2 FROM table where this = this";

breakControlq.CommandType = CommandType.Text;
breakControlq.Connection = hd01Connect;
try
{
    hd01Connect.Open();
    breakControlRead = breakControlq.ExecuteReader();
    while (breakControlRead.Read())
    {
        textBox1.AppendText(breakControlRead["q1"].ToString());
        textBox2.AppendText(breakControlRead["q2"].ToString());
    } 
    catch(System.Data.SqlClient.SqlException ex)
    {
        MessageBox.Show(ex.Message, "Connection Error");
    }
Run Code Online (Sandbox Code Playgroud)

这可能吗?我是否必须对每个查询重复连接/命令?

我对此很陌生,你们中的有些人会说这已经在某处得到了回答,但是我搜索了很多帖子,以至于当我开始寻找解决方案时,我感到更加困惑。

Mar*_*ell 5

您正在寻找.NextResult()。该.Read()方法改变在当前网格下一行; .NextResult()移至下一个网格

while (breakControlRead.Read())
{
   // process rows from first grid
}
if(breakControlRead.NextResult()) {
    while (breakControlRead.Read())
    {
       // process rows from second grid
    }
}
Run Code Online (Sandbox Code Playgroud)

或者 “ dapper”将通过.QueryMultiple()以下方式公开此内容:

using(var multi = conn.QueryMultiple(sql, args)) {
    var s = multi.Read<string>().AsList(); // items from first grid
    var i = multi.ReadSingle<int>(); // items from second grid
    // ...
}
Run Code Online (Sandbox Code Playgroud)

注意!您确实需要确保两个查询用空格或;; 分隔。在您的情况下,这会很好:

    @"SELECT something as q1 From table
      SELECT somethingelse as q2 FROM table where this = this";
Run Code Online (Sandbox Code Playgroud)

(请注意空格)

替代方式,更正确的是:

    @"SELECT something as q1 From table;
      SELECT somethingelse as q2 FROM table where this = this;";
Run Code Online (Sandbox Code Playgroud)

要么:

    @"SELECT something as q1 From table;SELECT somethingelse as q2 FROM table where this = this;";
Run Code Online (Sandbox Code Playgroud)