【问题标题】:How to catch multiple sql exception?如何捕获多个sql异常?
【发布时间】:2013-03-17 07:08:48
【问题描述】:

我的数据库中有两个唯一字段,用户可能会尝试通过我的网页添加已存在于其中一个(或两个)列中的值。从字面上看,有 2 个文本框,它们将引用 SQL 中的 2 列。

我希望捕捉到错误并向用户显示哪些单词(或哪些单词)不允许在其中创建重复项。

SQL 阻止我输入重复项,但是第一次尝试时会出错。意思是,如果用户尝试输入 2 个单词并且两个单词都是重复的,SQL 将在第一个文本框上出错,这意味着用户可以更新 textBox1 的值,然后再试一次,然后被告知第二个文本框。这对用户不利,因为它很慢,但我不知道最好的方法是什么。

【问题讨论】:

  • 您将不得不详细说明。请显示一些代码
  • 您的意思是只想捕获特定的 SQL 异常,还是不希望每个异常都抛出错误而是记录错误并在流程结束时显示所有错误?跨度>
  • 我假设你正在寻找这个:stackoverflow.com/questions/6221951/… 所以使用number 属性。
  • @Tim Schmelter 我有两个独特的领域。当重复数据输入到任何字段错误时,会给出指定字段名称的错误消息,这可能吗?
  • @DaveRook 我想在尝试向其中输入重复数据时捕捉每个唯一字段发生的异常。

标签: asp.net sql exception try-catch


【解决方案1】:

SqlException 非常冗长,您将获得完整的堆栈跟踪,而不是导致异常的几个特定字段。

有时SqlException 也不会指定足够的内容,例如遇到内部失败的存储过程..

最好的办法是在访问数据库之前对字段值、FK 约束、非空检查等进行各种验证。

完全不建议访问数据库然后由于某些异常而让用户知道,因为这是一个很大的性能瓶颈。

【讨论】:

  • 如何验证唯一字段而不在客户端本身访问数据库?
  • 如果您使用普通的 jdbc 调用,那么您可以简单地触发 count() 查询。您还可以详细说明检查唯一字段吗?你想做什么样的验证?
  • 我正在使用 sql server。需要对 aspx 页面中的文本框中的重复数据实体进行验证。
【解决方案2】:

在我看来,您的最后一道防线是数据库!您应该阻止查询到达那里!

对我来说,我会查询数据库并检索这 2 列的所有行的 2 个值。

然后,当用户尝试提交时,我会检查列表以查看它是否存在。这意味着不会抛出异常。然后我可以决定如何在屏幕上显示这些信息。

当然,这取决于你有多少行,如果你有几百万,这可能不是很好,你可能想先用一个标量变量来 ping 数据库,看看值是否已经存在!

【讨论】:

    猜你喜欢
    • 2020-05-10
    • 2016-11-17
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 2017-09-26
    相关资源
    最近更新 更多