2012-09-03 61 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对象的任何方法,您将收到异常。