1

私はこのコードを得ました:

try
{
    using (OracleConnection c = new OracleConnection(globalDict[byAlias(connAlias)].connString))
    {
        c.Open();

        using (OracleCommand recordExistentQuery = new OracleCommand("regular.IsExistent", c))
        {
        // here working on oraclecommand
        }
    } 
 } catch(Exception exc) { }

OracleConnectionは、devArt dotConnect for Oracle のクラスです。このコードはc.Close()、外に出たときに呼び出され(OracleConnection c = new OracleConnection(globalDict[byAlias(connAlias)].connString)) { .... }ますか?

4

2 に答える 2

3

いいえ、呼び出しますDipose()。ブロックは、ステートメントで指定されたオブジェクトusingを暗黙的に呼び出します。Dispose()using

しかし、多くの場合、データベース接続でDispose()は、機能を処理しClose()、接続を維持する接続/プロセス ID を解放します。

于 2012-02-21T05:28:43.753 に答える
0

//here working on oraclecommandまた、例外が発生した場合は、 (基本的にusing(...){ }ステートメント内で)Dispose()も呼び出されることを追加したいと思います。

設計上、 を実装するオブジェクトに対して複数の呼び出しを行うことができるはずですIDisposableClose()あなたの場合、接続がすでに閉じられている/プールに返されているため、コードブロックの後に呼び出しを発行しusingても何もしません。オブジェクトがクリーンアップされた後の追加の呼び出しは、ただ戻って何もしません。

于 2012-02-21T06:59:08.090 に答える