首页 > 解决方案 > C# & SQL Server:在打开数据读取器时执行另一个查询

问题描述

我打算在ExecuteNonQuery()打开时SqlDataReader执行呼叫。

代码:

string commandString = "" //command string

using (SqlDataReader reader = cmd2.ExecuteReader())
{
    while (reader.Read())
    {
        string temp = Convert.ToString(reader["RequestID"]);
        string date;

        using (SqlCommand cmd3 = new SqlCommand(commandString, con))
        {
            date = Convert.ToString(cmd3.ExecuteScalar());
        }
    }
}

我尝试执行此操作,但出现错误:

System.Data.dll 中发生“System.InvalidOperationException”类型的未处理异常
已经有一个打开的 DataReader 与此命令关联,必须先关闭。

我在连接字符串中有MultipleActiveResultSets设置。True我可以知道是否可以这样做吗?

标签: c#sql-server

解决方案


虽然 MARS应该可以工作,但它通常不是最佳选择。只需将第一个查询的结果加载到 DataTable 中并迭代行。

var dt = new DataTable();
using (SqlDataReader reader = cmd2.ExecuteReader())
{
    dt.Load(reader);
}
foreach (DataRow row in dt.Rows)
{
    string temp = Convert.ToString(row["RequestID"]);
    string date;

    SqlCommand cmd3 = new SqlCommand(commandString, con)
    date = Convert.ToString(cmd3.ExecuteScalar());
}

推荐阅读