【问题标题】:Is it okay to call OracleConnection.Open() if the connection is already open?如果连接已经打开,可以调用 OracleConnection.Open() 吗?
【发布时间】:2012-04-11 05:26:02
【问题描述】:

IOW,有没有标准的测试方法,a la:

if (! con.Open())
  con.Open();

?

更新: 我想我没有提到这些是我正在使用的 Oracle 的 ODP 组件。 OracleConnection 组件没有 ConnectionState 属性。

【问题讨论】:

  • System.Data.OracleClient.dll 还是 Oracle.DataAccess.dll?

标签: c# .net winforms oracle database-connection


【解决方案1】:

使用Connection.State属性检查连接是否已经打开

if(con.State == ConnectionState.Closed){
  con.Open();
}

【讨论】:

  • 注意:如果连接丢失,这将不起作用。例如,如果您在程序运行时终止此会话,con.State 仍将是 Open。我很想知道是否有人有一种低开销的方法来判断与会话的连接是否真的打开。例如:您可以与 DB 进行的最低成本交互以检查会话是否打开?
【解决方案2】:
if(Con.State != ConnectionState.Open)
con.Open(); 

如果您只想打开已关闭的连接,您可以使用

if(Con.State == ConnectionState.Close)
con.Open(); 

连接状态:http://msdn.microsoft.com/en-us/library/system.data.connectionstate.aspx

【讨论】:

  • 第二个if不应该是==而不是!=吗?
  • 我想我没有提到这些是我正在使用的 Oracle 的 ODP 组件。 OracleConnection 组件没有 ConnectionState 属性。
【解决方案3】:

您需要将代码分成不同的层以避免这种情况。连接应该只在主方法中打开(在 API 中 - 不是应用程序的主方法) - 然后传递给只使用连接而不管理连接(打开、关闭、事务操作等)的协调(私有)方法)。这可以让您的代码保持干净并且您的事务/连接安全。

【讨论】:

  • 这怎么可能是答案?...是一个很好的建议,但问题的主题没有得到回应
  • 即使日期戳不正确,此问题也已更改。原始帖子有更多未隔离的代码。
  • 我不知道这与实际问题有何关系,但很好的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
相关资源
最近更新 更多