我正在清理vb.net需要工作,我有一个问题,我希望你能澄清。我的应用程序需要一个与数据库的连接,现在当表单加载时,我执行以下函数:
Sub OpenConnection()
Try
Dim connection As New Connection
Dim MysqlConn = connection.establishConnection()
MysqlConn.Open()
Catch myerror As MySqlException
MessageBox.Show("Connection failed: " & myerror.Message)
Finally
MysqlConn.Dispose()
End Try
End Sub问题是在另一个函数中也使用了connection和MysqlConn变量,所以我已经将这两个变量声明为全局变量。如何看到这个变量是在OpenConnection()中重新声明的,因为我有一个表单,用户可以在其中更改设置连接字符串。现在,如果软件无法连接到数据库以获得错误的凭据,用户就会将其更改为设置表单,但是如果我删除了connection和MysqlConn,则应用程序将使用类的过去实例,因此即使凭据是正确的,也不会声明应用程序无法连接的连接的新实例。目前,我已经解决了OpenConnection()内部的重声明问题,但这是一个好的步骤吗?有没有一种方法可以让两个全局变量在不重新定义函数的情况下调用一个新实例?
连接类- EstablishConnection函数
Public Function establishConnection()
Dim MysqlConn As MySqlConnection = New MySqlConnection()
Dim server_name = My.Settings.server_name
Dim username = My.Settings.username
Dim password = My.Settings.password
Dim database = My.Settings.database
MysqlConn.ConnectionString = "server=" & server_name & ";" _
& "user id=" & username & ";" _
& "password=" & password & ";" _
& "database=" & database & ";"
Return MysqlConn
End Function发布于 2015-12-09 13:02:05
如何重新声明类的实例?
变量被声明。
对象被实例化(实例化)。
它们从来不是_re_declared,而是刚刚创建的另一个新的。采取这一行(类似于你的):
Dim connection As MySQLConnection它声明一个变量,给它一个名称和类型。
Dim connection As MySQLConnection = New MySQLConnection第二部分创建一个实例-- New操作符是关键:它创建一个新实例。您使用的短手表单可以同时完成这两个操作,并且可能会使两个不同的操作--声明一个变量和创建一个实例的--正在进行中。
显然,您有一个名为Connection的类来“管理”连接。但是顶部的方法,OpenConnection只是使用它来设置/重置一些全局对象var。通常应该创建、使用和处理dbConnections。
像您这样的连接制造者-助手可以防止将连接字符串分散在代码中。例:
Function GetMySQLConnection(Optional usr As String = "root",
Optional pw As String = "123456") As MySqlConnection
Dim conStr As String
conStr = String.Format("Server=localhost;Port=3306;Database={0};Uid={1}; Pwd={2};",
MySQLDBase, usr, pw)
Return New MySqlConnection(constr)
End Function这可能是一个用于保存DBname和其他登录信息的小类的一部分。但是使用它不需要全局var:
Sub GetSomeData(...)
Using dbCon As MySqlConnection = GetMySQLConnection()
...
dbCon.Open()
myDA.Fill(myDT)
...
End Using
End Sub开始时,为这组操作创建一个新的连接对象,该操作仅在本地存在(在该方法中)。Using块确保连接已关闭(并返回到池),并在完成连接时释放。
https://stackoverflow.com/questions/34178461
复制相似问题