我正在清理vb.net需要工作,我有一个问题,我希望你能澄清一下。我的应用程序需要与数据库建立连接,现在当表单加载时我执行此函数:
file-right
问题是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
内部重新声明了解决了,但这是一个很好的举动吗?有没有办法让两个全局变量调用一个新实例而不重新定义函数?
连接类 - EstablishConnection功能
OpenConnection()
答案 0 :(得分:2)
如何重新声明类的实例?
声明变量。
对象是实例化的(实例化)。
他们永远不会重新宣布;刚刚创建了另一个新的。走这条线(与你的相似):
Dim connection As MySQLConnection
它声明一个变量,给它一个名称和类型。
Dim connection As MySQLConnection = New MySQLConnection
第二部分创建一个实例 - New
运算符是关键:它创建一个 new 实例。您使用的简写形式同时进行,并且可能不清楚2个不同的操作 - 声明变量和创建实例 - 正在进行中。
显然,你有一个名为Connection
的班级来管理"连接。但是top方法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和其他登录信息的小类的一部分。但使用它不需要全局变量:
Sub GetSomeData(...)
Using dbCon As MySqlConnection = GetMySQLConnection()
...
dbCon.Open()
myDA.Fill(myDT)
...
End Using
End Sub
一开始,为这组操作创建 new 连接对象,该对象仅存在于本地(在该方法中)。 Using
块确保连接已关闭(并返回到池中),并在完成后将其丢弃。