我一直在尝试向我的测试应用程序添加异常处理,但没有成功。我的应用程序使用 SQLite 作为数据库提供程序。
我试图捕捉 SQLiteException:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
try
{
Application.Run(new Main());
}
catch (System.Data.SQLite.SQLiteException)
{
MessageBox.Show("Unable to perform database operation. Database file is missing or corrupt", "Database error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
在我的主要形式中,我有这样的行:
using (DbWrapper db = DbFactory.GetConnection("SQLite").WrapIn<MyDbWrapper>())
{
db.Open();
count = db.ExecuteScalar<int>("SELECT COUNT(*) FROM subject WHERE schedule_id = " + ScheduleList.SelectedValue);
}
但是,如果我从工作目录中删除我的数据库文件,我仍然会收到未处理的异常而不是 MessageBox 窗口。
System.Data.SQLite.SQLiteException (0x80004005): 无法打开数据库文件
我也尝试过捕获异常类型和 AppDomain.CurrentDomain.UnhandledException 事件,但仍然有相同的行为。
我不是在寻求解决方案,只是想知道为什么会这样?为什么我无法捕捉到异常?可能是由于在使用块中遇到异常时GC损坏引起的吗?
更新:如果我将我的 sql 操作代码包装在我的表单方法中的 try-catch 块中,则异常处理非常有效。
更新:通过添加 ThreadExceptionEventHandler 解决了问题。任何想法如何直接捕获 SQLiteException ?
此致