我在数据库连接处理方面有一个特殊的问题,尽管在连接,数据集和数据表的处理方面有很多来回回折,但作为一个新的VB编码器,我还是不太了解。我的项目的表单带有一个简单的“导入数据库”按钮,可以打开一个连接。假设我有一个包含多个数据集和数据表的数据库,这些数据库占用了大量的内存,因此我必须小心如何打开和关闭对象。完成后,我有一个按钮可以关闭数据库。代码简短地看起来像这样,不会引发错误(即我可以连接,获取正确的数据,然后关闭数据库而不会引发错误)
Public ConnectedDB as DataBaseOps
Class Form1
Private Sub ImportDatabaseButton(sender as object, e and eventargs) handles ImportDatabasebutton.click
'Open filedialog and return the path, etc.
strPATH = OpenFileDialogMaster(...my filters here...)
ConnectedDB.OpenDatabase(strPath)
End Sub
Private Sub populateDSDT(....)
'...populate my datasets which then populate my datagrids
ConnectedDB.PopulateMyDataSet()
'...populate my datagrids
End sub
Private Sub CloseDatabaseButton(sender as object, e and eventargs) handles CloseDatabaseButton.click
ConnectedDB.CloseDatabase()
'Can I put something here to clean up the DatabaseOPs class?
End Sub
End Class
现在在单独的班级中
Public OpenCon As OleDb.OleDbConnection
Private Class DataBaseOps
Public Sub OpenDataBase(strPath as String)
'My.Settings.ConnectionString is a variable in App.Config
OpenCon = New OleDb.OleDbConnection(My.Settings.ConnectionString & strPath)
OpenCon.Open()
End Sub
Public Sub PopulateMyDataSet()
'...Populate my datasets and tables based on data from the database
'...Note that for the adapters I include "Using" to help keep those clean when I no longer need them
End sub
Public Sub CloseDatabase()
Try
OpenCon.Close()
Catch ex As Exception
MessageBox.Show("No Database file loaded.")
End Try
End Sub
Overrides Sub Finalize()
'...Datasets get .Dispose() which is a topic of its own elsewhere.
OpenCon.Dispose()
End Sub
End Class
请记住,还有其他方法可以执行此操作,但是这里的关键因素是打开连接,使其保持打开状态以填充数据网格,在数据库中执行其他一些工作,然后关闭它以释放连接和数据集内存。] >
我的问题是,我尝试了各种方法来限制“ ConnectedDB”及其数据集的范围,包括将Finalize()子放入进程中,以尝试将其从内存中删除。我也玩弄了范围界定,但是这些想法都不能完美地发挥作用,而且我似乎将所有内容都保留在内存中。使用我的通用代码,我该怎么办才能在此处清理内存资源?作为一个相对较新的VB.net编码器,我是否缺少明显的东西(例如我可以将一个类继承到另一个类而不是调用它们?)
我在数据库连接处理方面有一个特殊的问题,尽管在处理连接,数据集和数据表时有很多来回回避,但我还是不太了解……
OpenCon.Dispose()
之后完成