c# - 服务器错误 'executenonquery requires an open and available connection'

标签 c# connection executenonquery

我在服务器上遇到了这个错误,而不是在本地,当遇到这个错误时,我重新上传了相关的类文件。解决了这个问题,但不是永久的。

错误:

executenonquery requires an open and available connection. The connection's current state is open.

代码:

int n;

try
{
    using (SqlCommand cmd = new SqlCommand())
    {
        cmd.Connection = DataConnection.Con;
        cmd.CommandText = "sp_InsertUpdateDeleteValidationDate";
        cmd.CommandType = CommandType.StoredProcedure; cmd.CommandTimeout = 0;
        cmd.Parameters.AddWithValue("@Task", "CheckExist");
        cmd.Parameters.AddWithValue("@id", 0);
        cmd.Parameters.AddWithValue("@AdId", "");
        cmd.Parameters.AddWithValue("@Username", "");
        cmd.Parameters.AddWithValue("@DOE", DOE);
        cmd.Parameters.AddWithValue("@ExpieryDate", DateTime.Now);
        cmd.Parameters.AddWithValue("@DOR", DateTime.Now);
        cmd.Parameters.Add("@flag", SqlDbType.Int).Direction = ParameterDirection.Output;

        if (cmd.Connection.State  == ConnectionState.Closed)
        {
            cmd.Connection.Open();
        }
        cmd.ExecuteNonQuery();
        n = Convert.ToInt32(cmd.Parameters["@flag"].Value);
        return n;
    }
}
catch (SqlException Ex)
{

    return 0;
}

最佳答案

您只能在 DataConnection 类中创建一个连接。您应该为每个数据库调用创建一个新连接,并让驱动程序的连接池负责有效地重用它们。

将您的 DataConnection 类更改为:

public class DataConnection
{
    public static SqlConnection Con
    {
        get 
        { 
            return new SqlConnection(ConfigurationManager
                .ConnectionStrings["conn"].ConnectionString); 
        }
    }
}

并在像 ekad 的回答中那样使用连接时使用 using 语句:

using (SqlConnection conn = DataConnection.Con)
{
    using (SqlCommand cmd = new SqlCommand())
    {
        cmd.Connection = conn;
        //use the command here
    }
}

关于c# - 服务器错误 'executenonquery requires an open and available connection',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26837508/

相关文章:

c# - 在 64 位进程中加载​​ 32 位 dll

c# - 如何使用响应式扩展等待 IObservable<T> 完成而不阻塞 UI?

php - 我的 mysql 连接返回错误?

database - 为什么 Entity Framework 连接需要元数据属性?

javascript - Cordova 应用程序 Socket.IO 连接不起作用

MySQL row_count() 行受影响

c# - Windows 窗体应用程序命令行参数

c# - Linq Where Clauses - 更好地堆叠或组合?

c# - Oracle ExecuteNonQuery 在 "Select for update nowait"挂起