我有一个控制台应用程序,其代码如下所示(简化):
public static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper;
InsertRow();
}
private static void InsertRow();
{
DAO.DBEngine dbEngine = new DAO.DBEngine();
DAO.Database db = dbEngine.OpenDatabase("database_name");
DAO.Recordset rs = db.OpenRecordset("table_name");
DAO.Field myField = new DAO.Field();
rs.AddNew();
// System.Runtime.InteropServices.COMException occurs here, but only in the IDE Debugger:
myField.Value = "oops, this value is bigger than the size of the column";
rs.Close();
db.Close();
}
private static void UnhandledExceptionTrapper(object sender, UnhandledExceptionEventArgs e)
{
// Log error
Environment.Exit(1);
}
为什么COMException不触发UnhandledException事件?
在我的真实代码中,DAO 的东西在一个单独的类中。我尝试catch
了 COMException 并再次抛出它,如下所示:
private static void InsertRow();
{
try
{
... // See code above
myField.Value = "oops, this value is bigger than the size of the column";
}
catch (System.Runtime.InteropServices.COMException ex)
{
throw new Exception(ex.Message, ex.InnerException);
}
finally
{
rs.Close();
db.Close();
}
}
然而,这也没有奏效。 我不明白什么?
顺便说一句,这确实有效,但我不想这样做:
catch (System.Runtime.InteropServices.COMException ex)
{
// Log error
Environment.Exit(1);
}
让风滚草开始吧!