2012-09-03 90 views
0

我似乎在Oracle連接中出現間歇性問題,指出有關信號量的問題,這表明Oracle以某種方式保持連接而不是在使用後刪除它們。關於Oracle連接的查詢

下面的代碼和連接字符串我用:

連接字符串:user id=user;password=password;data source=dataSource; Validate Connection=true;Min Pool Size=10;Connection Lifetime=5;Connection Timeout=60;Incr Pool Size=5;

我使用的代碼是這樣的:

Dim OracleConn As New OracleConnection() 
Dim DataTable As DataTable 
Dim queryOracle As OracleCommand 
Dim OracleDataAdapter As OracleDataAdapter 
Dim connStr As String = "user id=user;password=password;data source=dataSource; Validate Connection=true;Min Pool Size=10;Connection Lifetime=5;Connection Timeout=60;Incr Pool Size=5;" 
OracleConn.ConnectionString = connStr 

Try 

      OracleConn.Open() 

      queryOracle = OracleConn.CreateCommand() 

      queryOracle.CommandText = "select * from table1" 

      DataTable = New DataTable() 
      OracleDataAdapter = New OracleDataAdapter(queryOracle) 
      OracleDataAdapter.Fill(DataTable) 

      table1.DataSource = DataTable.DefaultView 
      table1.DataBind() 

     Catch OracleEx As OracleException 
      Throw 
     Catch ex As Exception 
      Throw 
     Finally 

      If Not OracleConn Is Nothing And OracleConn.State = ConnectionState.Open Then 
       OracleConn.Close() 
      End If 

     End Try 

現在我的問題是:

  1. 這是做這件事的最好方法嗎?
  2. 我只有「關閉」我的連接,我需要「處置」它嗎?

我使用的方式是Oracle.DataAccess.Client

任何幫助將非常感激

回答

0

嘗試在使用之間進行一切操作。

Using oracleConn as OracleConnection = new OracleConnection() 
'Your stuff goes here 
End Using 

命令也是如此。

P.S.如果再次拋出異常,則不需要捕獲異常。

+0

感謝您的答案 - 順便說一下,我在這個階段拋出的唯一原因是爲了測試目的:) –

+0

也應該把using語句放在一個'Try Catch'中嗎? –

+0

對不起另一件事 - 如果我使用'Using'方法,我必須在每次使用時重置ConnectionString - 是否正確?目前,我在「Page_Load」上設置了一次,並在整個頁面中使用它。 –

0

我建議你使用使用塊(在最終執行的Dispose)

Using connection As New OracleConnection() 

    .... 

End Using 

2應用程序可以調用關閉超過一次。沒有異常產生。

如果你調用Dispose方法,SqlConnection對象的狀態將被重置。如果您嘗試調用處置SqlConnection對象的任何方法,您將收到異常。