1

我有一个控制台应用程序,其代码如下所示(简化):

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);
  }

让风滚草开始吧!

4

0 回答 0