【发布时间】: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