C# asp.net中的连接超时错误
我遇到了一些问题,每次单击按钮时都会出现以下错误: 超时已过期。获取数据之前经过的超时时间 来自池的连接。发生这种情况的原因可能是所有的 连接正在使用,已达到最大池大小 这一分钟,下一分钟,我有一个错误。它抛出一个异常C# asp.net中的连接超时错误,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我遇到了一些问题,每次单击按钮时都会出现以下错误: 超时已过期。获取数据之前经过的超时时间 来自池的连接。发生这种情况的原因可能是所有的 连接正在使用,已达到最大池大小 这一分钟,下一分钟,我有一个错误。它抛出一个异常 public List<TransactionIssues> GetAllTransactions() { SqlConnection connection = new SqlConnection(connect
public List<TransactionIssues> GetAllTransactions()
{
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand();
List<TransactionIssues> transIssues = new List<TransactionIssues>();
command.CommandText = "issue_sp_getallunpostedissues";
command.CommandType = CommandType.StoredProcedure;
command.Connection = connection;
SqlDataReader rdrObj;
try
{
connection.Open();
rdrObj = command.ExecuteReader();
while (rdrObj.Read())
{
TransactionIssues issues = new TransactionIssues();
issues.requisitionNumber = rdrObj.GetString(0);
issues.transactionDate = rdrObj.GetDateTime(1);
//issues.expense_acccount.account_desc = rdrObj.GetString(2);
//issues.expense_acccount.index = rdrObj.GetInt16(3);
issues.inventory_acccount.index = rdrObj.GetInt32(2);
issues.inventory_acccount.account_desc = rdrObj.GetString(3);
issues.docNumber = rdrObj.GetString(4);
issues.docType = rdrObj.GetString(5);
issues.items = getTransItemByRquisition(rdrObj.GetString(4));
transIssues.Add(issues);
}
rdrObj.Close();
}
catch (Exception ex)
{
throw ex;
}
finally
{
connection.Close();
}
return transIssues;
}
公共列表GetAllTransactions()
{
SqlConnection连接=新的SqlConnection(connectionString);
SqlCommand=newsqlcommand();
列表传输=新列表();
command.CommandText=“发布\u sp\u GetAllunPostDissues”;
command.CommandType=CommandType.storedProcess;
command.Connection=连接;
SqlDataReader-rdrObj;
尝试
{
connection.Open();
rdrObj=command.ExecuteReader();
while(rdrObj.Read())
{
交易事项问题=新交易事项();
issues.requisionNumber=rdrObj.GetString(0);
issues.transactionDate=rdrObj.GetDateTime(1);
//issues.expense\u acccount.account\u desc=rdrObj.GetString(2);
//issues.expense_acccount.index=rdrObj.GetInt16(3);
issues.inventory_acccount.index=rdrObj.GetInt32(2);
issues.inventory\u acccount.account\u desc=rdrObj.GetString(3);
issues.docNumber=rdrObj.GetString(4);
issues.docType=rdrObj.GetString(5);
issues.items=getTransitemByRequestion(rdrObj.GetString(4));
运输。添加(问题);
}
rdrObj.Close();
}
捕获(例外情况除外)
{
掷骰子;
}
最后
{
connection.Close();
}
返回传输;
}
您应该处理SqlConnection,以防止内存泄漏和未关闭的连接。“using”关键字负责调用“finally”,从而关闭您的连接:
public List<TransactionIssues> GetAllTransactions()
{
using(var connection = new SqlConnection(connectionString))
{
using(var command = new SqlCommand())
{
List<TransactionIssues> transIssues = new List<TransactionIssues>();
command.CommandText = "issue_sp_getallunpostedissues";
command.CommandType = CommandType.StoredProcedure;
command.Connection = connection;
connection.Open();
using(SqlDataReader rdrObj = command.ExecuteReader())
{
while (rdrObj.Read())
{
TransactionIssues issues = new TransactionIssues();
issues.requisitionNumber = rdrObj.GetString(0);
issues.transactionDate = rdrObj.GetDateTime(1);
//issues.expense_acccount.account_desc = rdrObj.GetString(2);
//issues.expense_acccount.index = rdrObj.GetInt16(3);
issues.inventory_acccount.index = rdrObj.GetInt32(2);
issues.inventory_acccount.account_desc = rdrObj.GetString(3);
issues.docNumber = rdrObj.GetString(4);
issues.docType = rdrObj.GetString(5);
issues.items = getTransItemByRquisition(rdrObj.GetString(4));
transIssues.Add(issues);
}
}
rdrObj.Close();
return transIssues;
}
}
}
公共列表GetAllTransactions()
{
使用(var连接=新的SqlConnection(connectionString))
{
使用(var command=new SqlCommand())
{
列表传输=新列表();
command.CommandText=“发布\u sp\u GetAllunPostDissues”;
command.CommandType=CommandType.storedProcess;
command.Connection=连接;
connection.Open();
使用(SqlDataReader rdrObj=command.ExecuteReader())
{
while(rdrObj.Read())
{
交易事项问题=新交易事项();
issues.requisionNumber=rdrObj.GetString(0);
issues.transactionDate=rdrObj.GetDateTime(1);
//issues.expense\u acccount.account\u desc=rdrObj.GetString(2);
//issues.expense_acccount.index=rdrObj.GetInt16(3);
issues.inventory_acccount.index=rdrObj.GetInt32(2);
issues.inventory\u acccount.account\u desc=rdrObj.GetString(3);
issues.docNumber=rdrObj.GetString(4);
issues.docType=rdrObj.GetString(5);
issues.items=getTransitemByRequestion(rdrObj.GetString(4));
运输。添加(问题);
}
}
rdrObj.Close();
返回传输;
}
}
}
如果您在使用命令后处置了该命令(例如,将其放入
using
语句中),会发生什么情况?似乎您的连接仍在使用中,而您的池中的连接已用完。如果增加池大小延迟了这个错误,那么您必须找出让它们忙的原因…不是完全重复,而是相关的:但是我没有让它们一直忙,如何使用using语句;似乎我做得不正确。还应该在using块中包装rdrObj
。很好。更新:)