将使用语句返回关键字,保持连接打开?

sth*_*sth 1 c# ado.net database-connection sqlconnection timeoutexception

我们在SqlConnection.Open()上获得Timeout过期异常.

以下是代码:

public int ExecuteNonQuery(SqlParameter[] param, string strSPName)
{
    using (SqlConnection conn = new SqlConnection(_connStr))
    {
        int i = 0;
        using (SqlCommand cmd = new SqlCommand(strSPName, conn))
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddRange(param);
            conn.Open();
            i = cmd.ExecuteNonQuery();
        }
        return i;
    }
}
Run Code Online (Sandbox Code Playgroud)

语句中的return关键字是否using会打开连接,从而导致此问题?

Jon*_*eet 5

using语句中的return关键字是否会使连接打开,因此会出现此问题?

不可以.该using语句实际上是一个try/finally块语句,Dispose在该finally部分中调用- 因此您的连接仍将在该方法的末尾处理.

我怀疑你要么是在同一时间从太多线程中调用它并以这种方式耗尽你的游泳池,要么你在其他地方打开连接而不关闭它.

请注意,您可以通过删除i局部变量来使代码更简单:

public int ExecuteNonQuery(SqlParameter[] param, string strSPName)
{
    using (SqlConnection conn = new SqlConnection(_connStr))
    {
        using (SqlCommand cmd = new SqlCommand(strSPName, conn))
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddRange(param);
            conn.Open();
            return cmd.ExecuteNonQuery();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

同样,命令和连接仍将适当处理.