2016-09-13 11 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。あなたの解決は本当に私をalot.iに役立ったちょうど、何かに戻って文字列が接続が終了する前に来る場合は問題がありません尋ねたかった。 – dsaleem91

+0

だから、読者のクローズは最終的なコンストラクトにあります。常に実行されます。 –

関連する問題