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

时间:2015-08-04 09:23:22

标签: 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;
    }
}

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

1 个答案:

答案 0 :(得分:5)

  

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

没有。 using语句实际上是Dispose部分中finally调用的try / 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();
        }
    }
}

同样,命令和连接仍然会被妥善处理。