C# 将在using语句中返回关键字,保持连接打开?
SqlConnection.Open()上出现超时过期异常 代码如下:C# 将在using语句中返回关键字,保持连接打开?,c#,ado.net,database-connection,sqlconnection,timeoutexception,C#,Ado.net,Database Connection,Sqlconnection,Timeoutexception,SqlConnection.Open()上出现超时过期异常 代码如下: public int ExecuteNonQuery(SqlParameter[] param, string strSPName) { using (SqlConnection conn = new SqlConnection(_connStr)) { int i = 0; using (SqlCommand cmd = new SqlCommand(strSPName, c
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
语句实际上是finally
部分中的try/finally block语句aDispose
调用-因此您的连接在该方法结束时仍将被释放
我怀疑您是在同一时间从太多线程调用它,并以这种方式耗尽您的池,还是在其他地方打开连接而没有关闭它
请注意,通过去掉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();
}
}
}
同样,命令和连接仍将被适当地处理
using语句中的return关键字是否使连接保持打开状态,从而导致此问题
否。using
语句实际上是finally
部分中的try/finally block语句aDispose
调用-因此您的连接在该方法结束时仍将被释放
我怀疑您是在同一时间从太多线程调用它,并以这种方式耗尽您的池,还是在其他地方打开连接而没有关闭它
请注意,通过去掉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();
}
}
}
同样,命令和连接仍然会被适当地处理。因为它是try-finally语句的语法糖,不,它不会。这个语句有很多重复,但不能选择。因为它是try-finally语句的语法糖,不,它不会。这个语句有很多重复,但不能选择。谢谢Jon。是的,一次可以从多个用户调用它。上面的代码是否可以防止超时
异常?@sth:不,我提供的代码片段在功能上是等效的,但比您当前的代码更简单。根据您有多少并发用户以及存储过程运行所需的时间,您可能只需要增加连接池的大小-但我们不知道足够的上下文。我希望增加连接池大小不会有任何副作用。@sth:您的数据库将有更多的工作要做-但基本上我们不知道这是否是一个问题,因为我们没有上下文。谢谢Jon。是的,一次可以从多个用户调用它。上面的代码是否可以防止超时
异常?@sth:不,我提供的代码片段在功能上是等效的,但比您当前的代码更简单。根据您有多少并发用户以及存储过程运行所需的时间,您可能只需要增加连接池的大小-但我们不知道足够的上下文。我希望增加连接池大小不会有任何副作用。@sth:您的数据库将有更多的工作要做-但基本上我们不知道这是否是一个问题,因为我们没有上下文。