2013-03-27 58 views
1

我的數據庫中有兩個獨特的字段,用戶可能會嘗試通過我的網頁添加一個(或兩個)列中已經存在的值。從字面上看,有2個文本框,這些將引用SQL中的2列。如何捕獲多個sql異常?

我想捕獲錯誤並向用戶顯示在創建副本時不允許使用哪個單詞(或多個單詞)。

SQL阻止我輸入重複項,但它在第一次嘗試時會出錯。意思是,如果用戶試圖輸入2個單詞並且兩個都是重複的,SQL會在第一個文本框上出現錯誤,這意味着用戶可以更新textBox1的值,然後嘗試一次,然後被告知第二個文本框。這對用戶不好,因爲它很慢,但我不知道最好的方法是什麼。

+3

你將不得不精心製作一點。請示出一些代碼 – 2013-03-27 08:52:45

+0

您的意思是您只想捕獲特定的SQL異常,或者您不希望每個異常都拋出一個錯誤,而是記錄錯誤並在過程結束時顯示所有錯誤? – Dave 2013-03-27 08:55:02

+1

我假設你正在尋找這個:http://stackoverflow.com/questions/6221951/sqlexception-catch-and-handling因此,使用[編號](http://msdn.microsoft.com/en-us/library /system.data.sqlclient.sqlexception.number.aspx)屬性。 – 2013-03-27 08:55:06

回答

1

在我看來,你最後的防守就是數據庫!你應該阻止查詢到達!

對我來說,我會查詢數據庫,並檢索這2列的所有行的2值。

然後,當用戶試圖提交時,我會檢查列表以查看它是否存在。這意味着不會拋出異常。然後我可以決定如何將這些信息顯示在屏幕上。

當然,這取決於你有多少行,如果你有幾百萬也許這不是很好,你可能想先用一個標量變量ping數據庫,看看這個值是否已經存在!

0

SqlException是非常詳細的,你會得到一個完整的stacktrace而不是幾個特定的​​領域是什麼導致了這個異常。

有時也SqlException不會指定足夠就像在打一個存儲過程在內部發生故障的情況下,..

最好的辦法是做各種驗證爲字段值,FK約束,不爲空檢查等,然後擊中數據庫。

打到分貝,然後讓用戶知道由於一些例外,根本不建議這是一個很大的性能瓶頸。

+0

如何驗證獨特的領域沒有擊中數據庫我的意思是在客戶端本身? – 2013-03-27 09:10:38

+0

如果你使用普通的jdbc調用,那麼你可以簡單地觸發一個count()查詢..也可以詳細說明檢查唯一字段?你想做什麼樣的驗證? – 2013-03-27 09:16:25

+0

我正在使用sql服務器。需要在aspx頁面的文本框中對重複數據進行驗證。 – 2013-03-27 09:24:26