【问题标题】:Try Catch not catching Database connection error尝试 Catch 未捕获数据库连接错误
【发布时间】:2021-10-14 02:57:12
【问题描述】:

我正在使用以下代码打开数据库连接。如果连接因任何原因失败,我会收到带有所有详细信息的典型 VB 错误消息。我的程序停止了。它没有给我优雅的信息和结局。

无论连接错误如何(无论是密码相关、网络相关还是 sql server 相关),我的 try/catch 都不起作用。

即使我无法连接到数据库,我也需要我的程序继续运行。

Public Class SQL_Connection

    Public conn As New SqlConnection
    Public cmd As New SqlCommand

    Public Sub New()

            conn.ConnectionString = my_connection_string
            Try
                conn.Open()
            Catch ex As Exception
                MessageBox.Show("Unable to open database. " + ex.ToString)
            End Try

            cmd = conn.CreateCommand()
            
        End If

    End Sub
    
End Class

【问题讨论】:

  • 这个+ ex.ToString 附加了所有细节。
  • 无论如何你都做错了。不要缓存连接和命令对象,在需要时创建它们并使用Using 进行处理。见stackoverflow.com/questions/17552829/…。此外,构造函数中的消息框也非常令人惊讶,您会期望代码创建 对象来捕获异常。你可能还想看看docs.microsoft.com/en-us/visualstudio/debugger/…
  • @Charlieface,请注意这是连接和命令的包装类。因此,将它们存储在这里是有效的。但是,该类应该实现IDisposable
  • @OlivierJacot-Descombes 你有没有见过这里的海报写的包装类做得很好?在这种情况下,这几乎肯定是没有必要的,只会助长不良做法。
  • 这绝对是不正确的,因为连接池,请参阅上面的链接以及 docs.microsoft.com/en-us/dotnet/framework/data/adonet/…stackoverflow.com/questions/32645554/…。当从池中获取连接时,下一个发送的数据包设置了reset_connection 位,所以你看不到任何区别

标签: sql-server vb.net connection


【解决方案1】:

看看这个article

如果程序没有在调试模式下运行,try catch 会立即执行它而不停止执行。

【讨论】:

  • 我尝试了链接中的信息,它没有改变任何东西。我仍然无法绕过 SQL 服务器连接错误。我的错误信息仍然没有显示。
猜你喜欢
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
相关资源
最近更新 更多