如果在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/