将在using语句中返回关键字,保持连接打开

本文关键字:连接 关键字 using 语句 返回 将在 | 更新日期: 2023-09-27 18:06:09

我们在SqlConnection.Open()上得到Timeout expired异常。

代码如下:

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关键字是否使连接打开,从而导致此问题?

将在using语句中返回关键字,保持连接打开

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

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

同样,命令和连接仍将被适当地处理。