return 关键字会在 using 语句中保持打开状态吗?

Will return keyword inside using statement, leave the connection open?

我们在 SqlConnection.Open() 上收到超时过期异常。

下面是代码:

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

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

Does the return keyword inside the using statement leaving the connection to opened and hence this issue?

没有。 using 语句实际上是 try/finally 块语句 finally 部分中的 Dispose 调用 - 因此您的连接仍将在该方法的末尾处理。

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

请注意,您可以通过删除 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();
        }
    }
}

同样,命令和连接仍将得到适当处理。