我有一个 asp.net Gridview,它处理向 SQL 数据库中的插入操作。只有满足唯一性条件的记录才允许插入,并且使用 SQL Server 中的唯一索引强制执行此约束。如果用户尝试插入已存在的记录,则会显示错误消息。
我想知道实现这一点的最佳实践是什么。
- 检查记录是否存在 SQL 端,使用 IF EXISTS 和锁定提示(updlock、holdlock 等)。根据是否插入记录,向 ASP.net 返回错误代码
- 在 SQL Server 的 try/catch 块内执行 INSERT 操作,如果记录存在,则依靠唯一索引来防止插入发生。根据是否引发异常返回错误代码。
- 在 SQL 端执行 INSERT 操作,但没有 SQL try/catch。改为在 ASP.net 中处理 PK 违规异常。
通常我会考虑使用异常来处理有效操作是不好的做法——即软件不应该抛出异常,除非有什么东西坏了。但是,如果 SQL 中表上的唯一索引要实现所需的约束,为什么还要手动检查记录的存在呢?