0

我有一个 asp.net Gridview,它处理向 SQL 数据库中的插入操作。只有满足唯一性条件的记录才允许插入,并且使用 SQL Server 中的唯一索引强制执行此约束。如果用户尝试插入已存在的记录,则会显示错误消息。

我想知道实现这一点的最佳实践是什么。

  1. 检查记录是否存在 SQL 端,使用 IF EXISTS 和锁定提示(updlock、holdlock 等)。根据是否插入记录,向 ASP.net 返回错误代码
  2. 在 SQL Server 的 try/catch 块内执行 INSERT 操作,如果记录存在,则依靠唯一索引来防止插入发生。根据是否引发异常返回错误代码。
  3. 在 SQL 端执行 INSERT 操作,但没有 SQL try/catch。改为在 ASP.net 中处理 PK 违规异常。

通常我会考虑使用异常来处理有效操作是不好的做法——即软件不应该抛出异常,除非有什么东西坏了。但是,如果 SQL 中表上的唯一索引要实现所需的约束,为什么还要手动检查记录的存在呢?

4

1 回答 1

0

我会单独打电话来检查记录是否已经存在。如果是,则向用户显示消息,如果没有则插入。我这样做的原因是因为我更喜欢将所有业务逻辑保留在应用程序中。

如果您坚持只进行一个存储过程调用:

我会在插入之前检查。如果插入不成功,我还将向存储过程添加一个输出参数,该参数将返回一条消息。在我的应用程序中,如果我在输出参数中看到一条消息,我会将其显示给用户。

于 2012-10-09T21:30:17.540 回答