2012-03-27 72 views

回答

1

你需要将你的代码分成不同的区别ct图层来避免这种情况。只应在主方法(在API中 - 不是主应用程序的方法)中打开连接 - 然后传递给协调(私有)方法,该方法只消耗连接而不管理连接(打开,关闭,事务操作等) )。这使您的代码保持清洁,并保证您的交易/连接安全。

+0

这怎么可能是答案?...是一个很好的推荐,但问题的主题没有回答 – mjsr 2013-02-21 15:25:57

+0

即使日期标记不正确,此问题也已更改。原来的文章有更多的代码没有被隔离。 – tsells 2013-02-21 16:20:45

+0

我不知道这是如何涉及到实际问题,但很好的建议。 – 2015-10-13 09:17:24

11

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

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

注意:如果连接丢失,这不起作用。例如,如果您在程序运行时终止该会话,con.State将仍然处于打开状态。我想知道是否有人用低开销的方式来判断会话的连接是否真正打开。例如:您可以使用数据库来检查会话是否打开,您可以用最低成本进行交互? – shindigo 2013-06-27 15:31:45

4
if(Con.State != ConnectionState.Open) 
con.Open(); 

,如果你想只开放关闭的连接,你可以使用

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

ConnectionState:http://msdn.microsoft.com/en-us/library/system.data.connectionstate.aspx

+0

不应该那第二个'if'是'=='而不是'!='? – cadrell0 2012-03-27 16:34:54

+0

对,我做了复制和粘贴/ – 2012-03-27 16:37:21

+0

我想我没有提及这些是我使用的Oracle的ODP组件。 OracleConnection组件没有ConnectionState属性。 – 2012-03-27 16:41:36

相关问题