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
}
}
}