2009-10-26 107 views
1

我想陷阱SQL-2000主鍵錯誤到C#和發展自己的錯誤,如 「這是重複的發票號碼」陷阱主鍵錯誤

請回復如何在C#應用程序做到這一點。

Thanx。

回答

-1

而不是將其作爲例外處理,如果您希望發生這種情況,您應該在插入特定ID之前檢查它是否存在。

+0

-1這比捕獲異常更糟糕,因爲它會導致競爭條件(如果其他客戶端在您檢查的時間和您使用它的時間之間使用了該ID)。 – sleske 2012-08-07 16:01:00

+0

這取決於它是如何完成的 - 如果它是以事務方式在存儲過程中處理的,那麼這應該沒問題。 – Paddy 2012-08-08 08:01:50

+0

是的,這可以使工作,但它是相當不平凡,可能會顯着降低性能(整個表必須鎖定),所以爲什麼要麻煩?無論如何,隨意將所有這些添加到您的答案(然後我可能會刪除downvote)。 – sleske 2012-08-08 14:37:53

1

通常,這不被視爲好的設計。您應該在插入之前檢查重複密鑰,並僅依靠DB約束作爲「安全網」。

但是,如果您覺得要這樣做,您需要捕獲異常SQLException。然後,您需要使用SQLException的屬性(特別是ErrorCode和Number)來檢查它是否是PK違例。

但是,通常檢查SQLException的確切原因是棘手的,取決於所使用的DBMS,因此它不是一個好的和可靠的方法。這是爲什麼不推薦的原因之一(見上文)。