代码之家  ›  专栏  ›  技术社区  ›  Andrey

如何防止存储过程错误在SqlClient中引发异常?

  •  1
  • Andrey  · 技术社区  · 14 年前

    假设我有一个将一些数据插入表的存储过程。如果数据是重复的,则会导致sql server错误(因为我在某些列上有唯一索引),并且此错误会导致SqlClient中出现异常。我可以在存储过程中做些什么来处理错误,以便在我的数据访问代码中不会生成异常?

    4 回复  |  直到 14 年前
        1
  •  3
  •   Oded    14 年前

    你可以用 TRY CATCH 在存储过程中。

    当然,如果你的 CATCH 语句本身会导致异常/错误,它们将暴露给客户端。

    但是,您需要问问自己是否真的不想知道这些错误—它们是数据库/代码库中问题的迹象。

        2
  •  1
  •   marc_s    14 年前

    创建唯一索引时,可以告诉它以静默方式忽略任何重复项:

    CREATE UNIQUE INDEX UIX_YourTable
      ON (SomeColumn) WITH IGNORE_DUP_KEY = ON
    

    这是不是个好主意由你来决定。如果您有这样一个唯一的索引,那么您尝试插入的任何重复项都不会导致异常,也不会被插入—它们只是默默地失败。

    赞成的意见: 也不例外

    反对的论点:

        3
  •  1
  •   Marc Gravell    14 年前

    我不想这么说,但理想的答案是不要让存储过程导致错误,而是验证插入。或者更好,为了代码 调用 存储过程只要求它处理有效数据。在裂缝上贴纸只会让事情变得更难看——它会故意引发一个异常(高于某个错误级别)。

        4
  •  0
  •   devio    14 年前

    MERGE 而不是插入