我有这个查询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();
}
如果解决方案不起作用,则该问题开头的错误相同
答案 0 :(得分:2)
ExecuteReader
返回的SqlDataReader是服务器游标,这意味着该连接将由读取器专用,直到您将其关闭。因此,您将无法使用同一连接运行任何其他命令。
在列表中,我要做的是将您要做的事情(那些插入内容)保留下来,并在关闭阅读器后执行您需要执行的所有操作。
您可以使用using
块,以便关闭阅读器并将其丢弃。之后,您可以重用相同的连接。
using (var nomeItemRdr = cmd.ExecuteReader())
{
}
//You can reuse your connection here.