2016-09-13 6 views
0

현재 여러 유형의 보고서를 보거나 편집하기 위해 사용자가 로그인하는 응용 프로그램에서 작업 중이므로 다른 사용자는 변경 내용을 볼 수 있습니다. 그러나 사용자가 새 페이지로 이동하면 세션이 자동으로 시간 초과됩니다.자동 연결 시간 초과 (세션 시간 초과)

내 코드는 다음과 같습니다

Function Check_Access(ByVal strModule As String) As String 
     Dim drAccess As SqlClient.SqlDataReader, strUser As String 
     GetNetworkName() 
     strUser = HttpContext.Current.Session("LOGON_USER") 

     drAccess = SqlHelper.ExecuteReader(strConnOASIS, "Oasis.dbo.p_RPT_Check_Accessibility", strModule, strUser) 

    If drAccess.HasRows Then 
     If drAccess.Read() Then 
      Return drAccess.GetString(0) 
     End If 
    End If 
    drAccess.Close() 
    Return "0" 
End Function 

소스 오류 : 마지막으로

Line 45:   strUser = HttpContext.Current.Session("LOGON_USER") 
Line 46: 
Line 47:   drAccess = SqlHelper.ExecuteReader(strConnOASIS, "Oasis.dbo.p_RPT_Check_Accessibility", strModule, strUser) //Error 
Line 48: 
Line 49:   If drAccess.HasRows Then 

그리고 스택 추적 : 그것이 반환하는 경우 당신은 결코 데이터 판독기를 폐쇄하지 않습니다

[InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.] 

System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) +445 
    System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +318 

System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +132 

System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +195 

System.Data.SqlClient.SqlConnection.Open() +122 

Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteReader(String connectionString, CommandType commandType, String commandText, SqlParameter[] commandParameters) +412 

Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteReader(String connectionString, String spName, Object[] parameterValues) +442 

OasisInclude.GlobalFunctions.Check_Access(String strModule) in E:\Danish\VSO\OasisRedesign\Dev\Oasis\OasisInclude\GlobalFunctions.vb:47 

Residential.Residential.Page_Load(Object sender, EventArgs e) in E:\Danish\VSO\OasisRedesign\Dev\Oasis\Oasis\Residential\Residential.aspx.vb:56 

System.Web.UI.Control.OnLoad(EventArgs e) +109 

System.Web.UI.Control.LoadRecursive() +68 

System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3321 
+0

: 그것을 해결하기 위해

은에 코드를 변경합니다. 열려는 모든 데이터베이스 연결을 닫아야합니다. 데이터베이스 연결 풀의 크기를 늘릴 수도 있지만 조만간 같은 오류가 발생할 가능성이 높습니다. – jjmontes

답변

0

데이터. 열려있는 모든 데이터 판독기가 데이터베이스 연결을 유지하여 오류를 일으 킵니다. 응용 프로그램이 데이터베이스 연결을 얻기 위해 실패

Function Check_Access(ByVal strModule As String) As String 
     Dim drAccess As SqlClient.SqlDataReader, strUser As String 
     GetNetworkName() 
     strUser = HttpContext.Current.Session("LOGON_USER") 

     drAccess = SqlHelper.ExecuteReader(strConnOASIS, "Oasis.dbo.p_RPT_Check_Accessibility", strModule, strUser) 

     Try 
      If drAccess.HasRows Then 
       If drAccess.Read() Then 
       Return drAccess.GetString(0) 
       End If 
      End If 
     Finally 
      drAccess.Close() 
     End Try 
    Return "0" 
End Function 
+0

감사합니다. Jeff. 당신의 솔루션은 정말로 나를 도왔습니다. 나는 연결이 끊기기 전에 리턴 문자열이 오면 문제가 생기지 않을 것을 물어보고 싶었습니다. – dsaleem91

+0

그 이유는 독자 닫기가 Finally 구조에있는 이유입니다. 항상 실행됩니다. –