2012-03-27 86 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

相關問題