- - PR -
ODP.NETを利用したDB接続について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-10-04 15:42
いつもお世話になっています。
ODP.NETを利用してDBに接続するプログラムを作成しているのですが、 ひとつ疑問がありましてOracleConnectionクラスを生成する際に usingを使用した場合、OracleConnectionのCloseは明示的に実装する必要が あるのでしょうか? (ADO.NETではCloseしないといけないとどっかで見た記憶があります) 以下の例だとfinally句でOracleConnectionを閉じているのですが、 実装しなくてもいいような・・・ 例) using(OracleConnection connection = new OracleConnection("DB接続文字列")) { connection.Open(); // コネクションを開く // トランザクションの開始 OracleTransaction tran = connection.BeginTransaction(); try { 〜 SQLの実行 〜 tran.Commit(); // コミット } catch(OracleException ex) { tran.Rollback(); // ロールバック throw ex; } finally { connection.Close(); // クローズを明記する必要がある? } } 環境 OS:Windows 2003 Server DB:Oracle 10g | ||||
|
投稿日時: 2004-10-04 17:45
たっくんさん、こんばんは。 仮にクローズが必要無いとします。 しかし、他の方がソースを見た時にどう判断されるでしょうか? Closeが無い…と思われますね。(まぁ、コメントがあれば解るでしょうが…) それと、たっくんさんのプログラムが 確実にコネクションがクローズされると保障されますか? 万が一のことを考え、必ずクローズされる方が良いと思いますが、そのあたりはご自分の判断だと思われます。 ただ、私的な意見としては、クローズメソッドを書いている方が、綺麗なコーディングではないかと思いますが… | ||||
|
投稿日時: 2004-10-04 20:27
MSDNのOracleConnectionの説明を見ると、
とあります。これより、DisposeとCloseは等価に実装してあると予想されます。等価に実装してあるなら、using文を使用しているため、Closeメソッドの呼び出しは不要です。 ただし、OracleTransactionはDisposeする必要があります。複数のオブジェクトがあるので、using文を使わない方がすっきりすると思います。 _________________ | ||||
|
投稿日時: 2004-10-04 23:59
Jittaさん、ぺがらぼさん返答ありがとうございます。
OracleTransactionクラスのDisposeも必要なのですね。 usingを使わないほうがすっきりとした実装になりそうなので、 finally句でCloseとDisposeを記述するように変更します。 いろいろありがとうございました。 | ||||
|
投稿日時: 2004-10-05 06:29
DisposeメソッドがあるクラスはDisposeする、を原則としてください。また、Disposeがなくても、マニュアルを見てIDisposableインタフェースを実装しているクラスについては、代替メソッドを呼ぶ必要があります。この「代替メソッド」は、たとえば通信やファイルを扱うクラスではCloseメソッドが該当します。この辺はマニュアルに頼るしかありません。 _________________ |
1