如何在ExecuteReader中使用两个executeNonQuery

时间:2019-03-28 13:40:19

标签: c# sql wpf

我有这个查询ExecuteReader,里面有两个ExecuteNonQuery。它什么也没做。我试图将两个executeNonQuery放在cmd1cmd2下,但是由于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();

}

如果解决方案不起作用,则该问题开头的错误相同

1 个答案:

答案 0 :(得分:2)

ExecuteReader返回的SqlDataReader是服务器游标,这意味着该连接将由读取器专用,直到您将其关闭。因此,您将无法使用同一连接运行任何其他命令。

在列表中,我要做的是将您要做的事情(那些插入内容)保留下来,并在关闭阅读器后执行您需要执行的所有操作。

您可以使用using块,以便关闭阅读器并将其丢弃。之后,您可以重用相同的连接。

using (var nomeItemRdr = cmd.ExecuteReader())
{
} 
//You can reuse your connection here.