1

「using」ブロックでは、catch ステートメントで System.Environment.Exit(0) が発行された場合、OracleConnection が閉じられますか?

例:

        OracleConnection oracleConnection = getOracleConnection();

        using (oracleConnection)
        {

            try
            {

                oracleConnection.Open();
                OracleCommand cmd = getApplicantsCmd(oracleConnection);
                OracleDataReader rdr = cmd.ExecuteReader(); 

                List<Applicant> applicants = new List<Applicant>();
                while (rdr.Read())
                {
                    Applicant applicant = new Applicant();
                    applicant.email = (string)rdr["GOREMAL_EMAIL_ADDRESS"];
                    applicants.Add(applicant);                   
                }

                return applicants;

            }
            catch (Exception ex)
            {
                Console.WriteLine("Failure getting applicant records: " + ex.Message);
                System.Environment.Exit(0);
                return null;
            }
        }

レコードの検索中に例外がスローされた場合、実行を停止したい。

これを処理するより良い方法はありますか?

4

4 に答える 4

5

データベースへの物理接続は閉じられていません。再利用のために ADO.NET 接続プールに戻されただけです。ADO.NET は接続のプールを保持して、SQL クエリを実行するたびにデータベースへの物理接続を開かないようにします。また、例外が発生した場合でも適切に破棄されるように、 OracleCommandand OracleDataReaderinステートメントをラップする必要があります。using

于 2012-10-10T14:30:02.077 に答える
0

一般的にあなたの質問は、withingブロックが呼び出された場合、ステートメントDisposeで使用されるオブジェクトのメソッドが呼び出されるかどうかだと思います。usingEnvironment.Exitusing

答えはノーだ。Environment.Exitまたはを呼び出した場合Environment.FailFast、プロセスは終了し、finally ブロック (暗黙のブロック、usingステートメントの結果) は実行されません。

一方、呼び出してアプリを終了すると、Application.ExitorApplication.ExitThreadが呼び出されます。

于 2012-10-10T14:45:08.483 に答える
0

はい、そうです。その後すぐに処分されます。

編集:プールされていない限り、説明されているように、プールで再び利用可能になります。

于 2012-10-10T14:30:27.197 に答える