c# - 如何在 ExecuteReader 中有两个 executeNonQuery
问题描述
我有这个查询,ExecuteReader
,其中有两个ExecuteNonQuery
。它什么也没做。我试图把这两个executeNonQuery
放在下面cmd1
,cmd2
但它不允许这样做,因为它executeReader
是打开的。我需要采取哪些步骤来纠正此问题?
private void btnSTART_Click(object sender, RoutedEventArgs e)
{
sqliteCon.Open();
if (sqliteCon.State == System.Data.ConnectionState.Open)
{
string path = null;//estrazione1
SqlCommand cmd = new SqlCommand("select nomeI FROM tabL where selection=1", sqliteCon);
SqlDataReader nomeIRdr = null;//estrazione2
nomeIRdr = cmd.ExecuteReader();//estrazione3
while (nomeIRdr.Read())//estrazione4
{
path = nomeIRdr["nomeI"].ToString();//estrazione5
}
using (nomeIRdr = cmd.ExecuteReader())//cmd.ExecuteReader() gives me the error cmd doesn't exist in the current
{
sqliteCon.Open();
if (sqliteCon.State == System.Data.ConnectionState.Open)
{
Process MyProc = Process.Start(path);//permette la run del path contenuto nel db
MyProc.WaitForExit();
var exitCode = MyProc.ExitCode;
if (exitCode == 1)
{
SqlCommand cmd1 = new SqlCommand("insert into tabL resI values 'PASS'", sqliteCon);
cmd1.ExecuteNonQuery();
}
else
{
SqlCommand cmd2 = new SqlCommand("insert into tabL resI values 'FAIL'", sqliteCon);
cmd2.ExecuteNonQuery();
}
}
sqliteCon.Close();
}
MessageBox.Show("Items Started");
}
sqliteCon.Close();
}
如果解决方案是它不起作用,则与该问题开头的错误相同
解决方案
返回的SqlDataReader是ExecuteReader
一个服务器游标,这意味着该连接将由阅读器独占使用,直到您关闭它。因此,您将无法使用相同的连接运行任何其他命令。
我会做什么将您必须做的事情(那些插入)保存在列表中,并在阅读器关闭后执行您需要执行的所有操作。
您可以使用一个using
块,以便阅读器关闭和处置。之后,您可以重复使用相同的连接。
using (var nomeItemRdr = cmd.ExecuteReader())
{
}
//You can reuse your connection here.
推荐阅读
- java - 如何获得下一小时的毫秒数
- marklogic - 动态设置 ml-gradle 属性
- angular - Angular 6 将数据发布到休息 API 但返回错误 500
- javascript - 多次调用 Socket.io 事件侦听器,即使它仅从我的节点 js 服务器发出一次
- python - 如何在 MacOS Sierra/High Sierra 中使用 python 获取用户设置的计算机名称
- c++ - 读取 cin 但从文件读取时超出运行时间?
- android - 按每个卡片视图中的数字排序卡片视图
- r - 针对 mu 值的具有随机效应的多个单样本比较
- flex-lexer - 使用 lex 将输入与字符串匹配
- xaml - Xamarin.Forms 中的 Listview XAML 按钮