C# 主键错误陷阱

C# 主键错误陷阱,c#,error-handling,primary-key,C#,Error Handling,Primary Key,我想将sql-2000主键错误捕获到c#中,并开发自己的错误,如 “这是重复的发票号码” 请回复如何在c#应用程序中执行此操作 Thanx.如果您希望它发生,那么在插入之前应该检查特定ID是否存在,而不是将其作为异常处理。通常,这不是好的设计。您应该在插入前检查重复的密钥,并仅依赖DB约束作为“安全网” 但是如果您想这样做,您需要捕获异常SQLException。然后您需要使用SQLException的属性(特别是ErrorCode和Number)来检查它是否是PK冲突 但是一般来说,检查SQL

我想将sql-2000主键错误捕获到c#中,并开发自己的错误,如 “这是重复的发票号码”

请回复如何在c#应用程序中执行此操作


Thanx.

如果您希望它发生,那么在插入之前应该检查特定ID是否存在,而不是将其作为异常处理。

通常,这不是好的设计。您应该在插入前检查重复的密钥,并仅依赖DB约束作为“安全网”

但是如果您想这样做,您需要捕获异常SQLException。然后您需要使用SQLException的属性(特别是ErrorCode和Number)来检查它是否是PK冲突


但是一般来说,检查SQLException的确切原因很棘手,并且取决于所使用的DBMS,因此这不是一种好的、健壮的方法。这就是不建议使用该ID的原因之一(见上文)。

-1这比捕获异常还要糟糕,因为它会导致竞争条件(如果其他客户端在您检查和使用该ID之间使用该ID会怎么样)。这取决于它是如何完成的-如果它是以事务方式在存储过程中处理的,那么这应该没问题。是的,这是可以实现的,但它非常重要,并且可能会显著降低性能(整个表必须被锁定),那么为什么还要麻烦呢?不管怎样,你可以把这些都加到你的答案中去(然后我可能会取消否决票)。