首页 > 解决方案 > 如何在 ExecuteReader 中有两个 executeNonQuery

问题描述

我有这个查询,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();

}

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

标签: c#sqlwpf

解决方案


返回的SqlDataReaderExecuteReader一个服务器游标,这意味着该连接将由阅读器独占使用,直到您关闭它。因此,您将无法使用相同的连接运行任何其他命令。

我会做什么将您必须做的事情(那些插入)保存在列表中,并在阅读器关闭后执行您需要执行的所有操作。

您可以使用一个using块,以便阅读器关闭和处置。之后,您可以重复使用相同的连接。

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

推荐阅读