如果在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;
            }
        }


如果要在查找记录时引发异常,我希望执行停止。

有没有更好的方法来解决这个问题?

最佳答案

调用oracleConnection之后将不会调用Dispose()System.Environment.Exit方法,即使变量包装在using中。如果要确保断开连接,请将using放在try / catch内,或者不要在System.Environment.Exit内调用using。如果设置了标志,仍然可以退出,并在using语句之后对其执行操作:

var mustExit = false;
using (var oracleConnection = getOracleConnection()) {
    try {
        ...
    } catch {
        Console.WriteLine("Failure getting applicant records: " + ex.Message);
        mustExit = true;
    }
}
if (mustExit) {
    System.Environment.Exit(0);
}

关于c# - 在“使用”块中是一个OracleConnection关闭了,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12821838/

10-11 12:08