【发布时间】:2013-05-30 20:54:34
【问题描述】:
我一直在尝试向我的测试应用程序添加异常处理,但没有成功。 我的应用程序使用 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): 无法打开数据库文件
我也尝试过捕获 Exception 类型和 AppDomain.CurrentDomain.UnhandledException 事件,但仍然有相同的行为。
我不是在寻求解决方案,只是想知道为什么会这样?为什么我无法捕捉到异常?可能是因为使用block遇到异常时GC损坏造成的?
更新:如果我将我的 sql 操作代码包装在我的表单方法中的 try-catch 块中,则异常处理非常有效。
更新:通过添加 ThreadExceptionEventHandler 解决了问题。任何想法如何直接捕获 SQLiteException?
最好的问候
【问题讨论】:
-
你从哪里“得到”这些异常?只要你调试,你的调试器就会跳转到异常所在的行。从调试器中启动您的程序,它应该可以工作。
-
好吧,我确实知道我在哪里以及为什么会遇到异常。问题是:为什么我无法抓住它?
-
会发生什么,您是闯入调试器还是您的程序在发布时启动,然后崩溃并烧毁?
-
应用程序因未处理的异常错误而崩溃。
标签: c# winforms sqlite exception exception-handling