使用vb.net进行SqlException Try-Catch

时间:2017-02-10 18:13:26

标签: sql vb.net exception-handling

我正试图围绕vb.net中的Try-Catch语句。我正在尝试处理发生的SQL异常错误,但我不知道该怎么办呢?包含下面代码示例的特定方法也期望返回值。

Try
    Dim records As DataRecordCollection = Sql Insert SP call
Catch sqlEx As SqlException
    Select Case sqlEx.Number
        Case 547
        *****What goes here?*****
        Case Else
            Throw
    End Select
End Try

2 个答案:

答案 0 :(得分:3)

你可以放任何你想要的东西。我们无法为您提供此问题的答案,因为它可能是任何。它也可能 nothing ;你不必在那个地方放任何东西,虽然通常很难接受这样的例外。

关键在于您放在那里取决于完全在您的应用程序上。您可以创建日志条目,或者清除错误以向用户显示更好的内容,或者将其他代码放在那里以进行恢复或重试,甚至是上述所有内容。任何你想要的。但我们无法知道你想做什么。这取决于您和您的设计规范。

此外,您可以使用条件异常来简化此代码:

Try
     Dim records As DataRecordCollection = Sql Insert SP call
Catch sqlEx As SqlException When sqlEx.Number = 547
     // Put whatever you want here
End Try

最后,根据我的经验,最好的选择通常是完全跳过此级别的Try / Catch块。

如果您有一个设计良好的应用程序,那么您的数据库访问将被抽象到其自己的类,程序集,命名空间或其某些组合中,这些是与UI或业务层分开的。我的经验是,在数据库代码中处理这些异常并不像允许异常冒泡到更高级别的抽象那样有用。你可以更好地在那里处理它。这就是Try / Catch的全部内容......可以在最适合这种异常的级别捕获异常。

你甚至不知道自己想做什么时,尤其如此。如果您没有计划处理例外,那么就不要处理它。抛弃Try / Catch块,让异常泡沫达到更高的水平,也许其他人有更好的策略。

答案 1 :(得分:0)

Microsoft SQL Server将错误消息存储在数据库中,以便您可以在服务器中对其进行查询:

select * from sys.messages where message_id = 427 and language_id = 1033

当我在Sql Server 2016 Express上运行它时,我得到了以下结果:

Could not load the definition for constraint ID %d in database ID %d. Run DBCC CHECKCATALOG to verify the integrity of the database.

我建议您不仅调试错误消息,而且还会获得有关您的问题的其他信息。因此,请记录错误消息,在此处写下,我们将为您提供帮助。

谢谢你, Morzel