【问题标题】:Handling a Global Exception Specifically for MySQL Connection [closed]专门为 MySQL 连接处理全局异常 [关闭]
【发布时间】:2017-10-23 02:47:22
【问题描述】:

我需要处理我整个项目中的所有 MySQL 连接错误,而不是在每个 MyConnection.Open() 方法中添加 Try Catch 子句。我的目的是更改异常错误的文本,以便用户能够理解它。我该怎么办 ?谢谢

【问题讨论】:

  • 为什么不想用try?你可以做Try MyConnection.Open() Catch ex As Exception MsgBox("Connection can't be established") End Try
  • 因为我的项目中已经有很多 MyConnection.Open() (大约 150 个)。编辑它们中的每一个都不会有效。此外,我需要确保处理所有异常。
  • 异常需要一一处理不能通用的事情
  • 好的,当然,我会介意的。谢谢。

标签: mysql vb.net exception-handling


【解决方案1】:

Try Catch 是处理错误的推荐方法,如 Microsoft

所述

您还可以通过Try Catch 轻松个性化您向用户发送的消息

你说你有很多 MyConnection.Open() 那么这不是很好的编程,因此您可以使用如下函数。

您也可以用 CTRL + H 将所有MyConnection.Open() 替换为:OpenSqlConnection("YourConnectionString")

我没有具体说明,因为这对我来说很明显,但是如果实现 using,你应该在一个类中专门实现它

此示例向您展示了两种处理错误的方法,一种基于ConnectionState,另一种基于TypeOf Exception 这是一个简单的例子:

Private Sub OpenSqlConnection(ByVal connectionString As String)
    Using connection As New SqlConnection(connectionString)
        Try
            connection.Open()
        Catch ex As Exception
            If connection.State = ConnectionState.Broken Then
                MsgBox("The SQL connection is broken!")
            ElseIf connection.State = ConnectionState.Closed Then
                MsgBox("The connection was closed!")
            ElseIf TypeOf ex Is SqlException Then
                MsgBox("There is an SQL exception")
            ElseIf TypeOf ex Is InvalidOperationException Then
                MsgBox("There was an invalid operation")
            End If
        Finally
            'Clean up code
        End Try
    End Using
End Sub

请务必查看Try Catch MSDN 您也可以查看SqlConnection.Open() 以查看处理的错误类型

【讨论】:

  • 我明白了,这样总结起来会更有效。谢谢!
  • @JeffJo 如果这对您有帮助,请确保您花时间接受答案
  • 我不认为这和你想象的一样!一旦代码离开Using 块,连接将被关闭并释放,因此在方法外无法使用。
  • 我会介意的。谢谢@ChrisDunaway
【解决方案2】:

您还可以将@Mederic 中的OpenSqlConnection 用于新类(右键单击项目-> 添加-> 类)并将其用作项目中每个表单的实例Dim dbms as New classDatabase

在你的项目中添加一个新的类“classDatabase”,代码:

Public Class ClassDatabase
    ..
    Public Sub OpenSqlConnection(ByVal connectionString As String)
            Using connection As New SqlConnection(connectionString)
                Try
                    connection.Open()
                Catch ex As Exception
                    If connection.State = ConnectionState.Broken Then
                        MsgBox("The SQL connection is broken!")
                    ElseIf connection.State = ConnectionState.Closed Then
                        MsgBox("The connection was closed!")
                    ElseIf TypeOf ex Is SqlException Then
                        MsgBox("There is an SQL exception")
                    ElseIf TypeOf ex Is InvalidOperationException Then
                        MsgBox("There was an invalid operation")
                    End If
                Finally
                    'Clean up code
                End Try
            End Using
        End Sub
    ..
End Class

这是您项目表单中 ClassDatabase 的实现:

Public Class Form1  
    Private dbms As New ClassDatabase
    ..
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        dbms.OpenSqlConnection("connectionstring")
    End Sub
    ..
End Class

此代码未完成测试,请确保您处理所需的所有变量

【讨论】:

  • 同样,一旦代码离开 Using 块,连接将被关闭并释放,因此在方法之外无法使用。另外,拥有一个全局连接对象是个坏主意。最好在需要的时候打开连接,执行查询,然后关闭并释放连接。
猜你喜欢
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 2011-09-29
  • 2011-06-17
  • 1970-01-01
相关资源
最近更新 更多