我们在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
关键字是否会打开连接,从而导致此问题?
答案 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();
}
}
}
同样,命令和连接仍然会被妥善处理。