Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
专门为MySQL连接处理全局异常_Mysql_Vb.net_Exception Handling - Fatal编程技术网

专门为MySQL连接处理全局异常

专门为MySQL连接处理全局异常,mysql,vb.net,exception-handling,Mysql,Vb.net,Exception Handling,我需要处理整个项目中的所有MySQL连接错误,而不需要向每个MyConnection.Open()方法添加Try-Catch子句。我的目的是更改异常错误的文本,以便用户能够理解它。我该怎么办?谢谢Try-Catch是处理错误的推荐方法,正如微软所解释的那样 您还可以在Try Catch 你说你有很多 MyConnection.Open()那么这不是很好的编程,因此您可以使用下面的函数 您还可以用CTRL+HallMyConnection.Open()替换为:OpenSqlConnection(“

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

Try-Catch
是处理错误的推荐方法,正如微软所解释的那样

您还可以在
Try Catch

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

您还可以用CTRL+Hall
MyConnection.Open()
替换为:
OpenSqlConnection(“YourConnectionString”)

我没有具体说明,因为这对我来说是显而易见的,但是如果使用

此示例显示了两种处理错误的方法,一种基于
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

请确保还检查您可以检查以查看已处理的错误类型

您还可以使用
OpenSqlConnection
从@Mederic到新类(右键单击项目->添加->类),并将其用作项目中每个表单的实例
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

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

为什么不使用try?您可以执行
Try MyConnection.Open()Catch ex作为异常MsgBox(“无法建立连接”)结束Try
,因为我的项目中已经有很多MyConnection.Open()(大约150个)。编辑它们中的每一个都不会有效。此外,我需要确保所有的异常都会得到处理。异常需要一个接一个地处理。你不能做一般性的事情,记住阅读,好的,当然,我会介意的。谢谢。我明白了,这样可以更有效地总结。谢谢@JeffJo如果这对你有帮助,请确保你花时间接受答案。我不认为这和你认为的一样!一旦代码离开
Using
块,连接将被关闭并释放,因此在方法之外不可用。我会介意的。再次感谢@chrisdunaway,一旦代码离开Using块,连接将被关闭并释放,因此在方法之外无法使用。另外,拥有一个全局连接对象是个坏主意。最好在需要时打开连接,执行查询,然后关闭并释放连接。