2012-03-27 19 views
2

IOW、このための検査の標準的な方法は、ラ、そこにある:接続がすでに開いている場合は、OracleConnection.Open()をコールしても問題ありませんか?

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

更新日: 私が使用しているOracleのODPコンポーネントであるとは言いません。 OracleConnectionコンポーネントにはConnectionStateプロパティがありません。あなたが開いているだけで閉じられた接続をしたい場合は

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

System.Data.OracleClient.dllまたはOracle.DataAccess.dll? – cadrell0

答えて

1

コードをdistinに分割する必要がありますctレイヤーを使用してこれを回避します。接続はメインメソッド(APIでは主なアプリケーションのメソッドではない)でのみ開かれ、接続の管理なしで接続を消費するコーディネート(プライベート)メソッドに渡されます(オープン、クローズ、トランザクション操作など)。 )。これにより、コードをきれいに保ち、トランザクション/接続を安全に保ちます。

+0

これはどのように答えになることができますか。...はすばらしい勧告ですが、問題の主題は応答されません – mjsr

+0

この質問は日付スタンプが正しくないのに変更されました。元の投稿には分離されていないコードがたくさんありました。 – tsells

+0

これは実際の質問にどのように関連しているかわかりませんが、良いアドバイスです。 –

11

は、接続がすでにオープンしているかどうかを確認するためにConnection.Stateプロパティを使用し

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

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

+1

注:接続が失われた場合、これは機能しません。たとえば、プログラムの実行中にこのセッションを終了すると、con.Stateは引き続きOpenになります。私は、セッションへの接続が本当に開いているかどうかを知るために、オーバーヘッドが少ない方法があるかどうかを知ることに興味があります。たとえば、セッションが開いていることを確認するためにDBで行うことができる最低コストのインタラクションは何ですか? – shindigo

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

あなたが使用することができます

+0

2番目の 'if 'は' == 'not'!= 'でなくてはなりませんか? – cadrell0

+0

そうですね、私はコピー&ペーストしました/ –

+0

私はこれらが私が使用しているオラクルのODPコンポーネントであることに言及しなかったと思います。 OracleConnectionコンポーネントにはConnectionStateプロパティがありません。 –