我一直試圖添加異常處理到我的測試應用程序,但沒有成功。 我的應用程序使用SQLite作爲數據庫提供程序。C#WinForms無法捕獲SQLiteException
我特林趕上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);
}
但是,如果我從工作目錄我刪除我的數據庫文件m仍然得到未處理的異常而不是MessageBox窗口。
System.Data.SQLite.SQLiteException(0X80004005):無法打開數據庫文件
我也試着捕捉異常類型和AppDomain.CurrentDomain.UnhandledException事件,但仍然得到了同樣的行爲。
我不是要求解決方案,只是想知道爲什麼它是這樣的?爲什麼我無法捕捉到異常?可能是由於GC在使用塊時遇到異常而造成的?
更新:如果我將我的sql操作代碼封裝在我的窗體方法內的try-catch塊中,異常處理就完美了。
更新:問題已通過添加ThreadExceptionEventHandler解決。任何想法如何直接捕獲SQLiteException?
此致
你在哪裏「得到」這些例外?只要你調試,你的調試器就會跳轉到異常行。從調試器開始你的程序,它應該工作。 – nvoigt
嗯,我知道我在哪裏以及爲什麼會得到例外。問題是:爲什麼我無法捕捉它? – fakemeta
會發生什麼事情,你是否闖入調試器或執行程序,從發佈開始,只是崩潰並燒燬? – nvoigt