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();
}
}
}
同样,命令和连接仍将得到适当处理。
我们在 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();
}
}
}
同样,命令和连接仍将得到适当处理。