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
。很好。更新:)