c# - 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
我可以知道是否可以这样做吗?
解决方案
虽然 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());
}
推荐阅读
- uwp - UWP App剪贴板访问:如何防止多次处理相同的项目
- unity3d - 如何在 Unity 中使用 Mirror 生成不同的预制件?
- wix - 当我们使用 WIX 将鼠标悬停在 .msi 文件上时如何显示版本号
- python - 无法从“utils”错误中导入模块
- python - `.venv` 在 Windows 下在 VSCode 中调试 Python 时被忽略
- android - keyGenerator 中的提供者和密钥名称
- ajax - 在 AJAX 请求中为时事通讯订阅表单设置结果消息(Shopware 6)
- node.js - Windows 10 - 尝试卸载或更改程序时出现错误代码 2330
- kubernetes - 未找到 terraform kubectl 提供程序
- c++ - 为什么 struc 中的 bool 成员不接受用户输入?