2012-03-01 27 views
0

我有一個應用程序與使用外鍵約束的數據庫一起使用。顯示最終用戶的外鍵約束警告,他們明白

例如,我們有一個庫存表,它具有引用名爲case_names的表的外鍵約束。如果用戶試圖刪除具有任何引用其ID的庫存項目的案例名稱,則該操作受到限制。

我該如何向用戶顯示一條他們會理解的消息? '你不能刪除這個案例,因爲它仍然包含庫存項目。'我的想法是一個嘗試趕上(捕捉不同的錯誤類型?),但我真的不想用這個東西,可能是預期的。

的應用是在VB.Net使用MySQL.data

+0

您是否在嘗試刪除之後捕獲異常,或者在嘗試刪除之前是否檢查相關項目? – Nanhydrin 2012-03-01 16:48:47

+0

嘗試刪除後捕獲異常。 – Jeff 2012-03-01 16:50:04

回答

2

我不會使用異常處理用戶錯誤或正常程序流。 只需檢查用戶是否可以刪除記錄(使用可能是存儲過程),並且如果不顯示警告消息。

我認爲例外是你無法預見的錯誤。

編輯澄清:

存儲過程(或程序中的代碼)可以做到對所有涉及的表它甚至可以COUNT()多少條記錄將被刪除影響檢查請求。通過計算,你必須告訴用戶額外的好處庫存物品,有多少與案有關,在您例如:

「你不能因爲它仍然包含32個庫存 項刪除此情況下 「。

編輯澄清更多:

這並不是說,參照完整性不應該被正確設置在DB的,當然。如果你忘記了一些檢查,你仍然可以使用適用於你的數據庫(並且用戶會打電話給你,知道程序在說什麼:))。

+0

我同意 - 這就是爲什麼我不確定如何去做我想做的事情。我只知道他們是否看到以外鍵約束開始的錯誤 - 我正在打電話。我寧願讓它知道,以便他們明白爲什麼他們收到錯誤。 – Jeff 2012-03-01 16:56:38

+0

所以你說的基本上有一個存儲過程,檢查有多少庫存物品有case_id 1 - 如果它大於零,顯示用戶的號碼,並提醒他們他們不能刪除案件名稱? – Jeff 2012-03-01 16:58:44

+0

事實上,再一次'COUNT()'知道你是否可以安全地刪除主表,如果不告訴她一個很好的句子,而不是「違反外鍵」,這可能會嚇倒我:) – vulkanino 2012-03-01 17:00:28