C# ExecuteReader需要打开且可用的连接。连接的当前状态为“打开”

C# ExecuteReader需要打开且可用的连接。连接的当前状态为“打开”,c#,sql-server,C#,Sql Server,这是我使用的代码: StringBuilder cmdTekst = new StringBuilder(); SqlCommand cmd; cmd = Cnn.CreateCommand(); cmd.Connection = Cnn; if (Cnn.State != ConnectionState.Open) { Cnn.Open(); } cmd.CommandType = CommandType.Text; cmdTekst.AppendL

这是我使用的代码:

  StringBuilder cmdTekst = new StringBuilder();
  SqlCommand cmd;
  cmd = Cnn.CreateCommand();
  cmd.Connection = Cnn;
  if (Cnn.State != ConnectionState.Open)
  {
    Cnn.Open();
  }
  cmd.CommandType = CommandType.Text;
  cmdTekst.AppendLine("SELECT * FROM tblNummering WHERE type = 1 AND EindPer IS NULL;");
  cmd.CommandText = cmdTekst.ToString();
  Log.Debug("sql tekst = '" + cmd.CommandText + "'");
  SqlDataReader reader = cmd.ExecuteReader();
代码被简化了

这是我得到的例外

“ExecuteReader需要一个打开且可用的连接。该连接的当前状态为打开。”

据我所知,连接是可用的和开放的

我无法切换到使用。这将需要几天的重构

在此之前,其他几个连接已打开。 将连接数设置得更高并不能解决问题


有人知道如何解决这个问题吗?

。。。和可用连接
我将挑战您的假设,即切换到使用块需要几天的重构。只要在遇到代码时重构代码,或者像现在这样,遇到异常时重构代码即可。
using (var connection = new SqlConnection(Cnn.ConnectionString)) // use same connection string as your Global instance
using (var cmd = connection.CreateCommand())
{
  cmd.CommandType = CommandType.Text;
  cmd.CommandText = "SELECT * FROM tblNummering WHERE type = 1 AND EindPer IS NULL;"
  connection.Open();
  using(SqlDataReader reader = cmd.ExecuteReader())
  {
    while(reader.Read())
    {
      // fetch results
    }
  }
}