使用VB.net的数据库连接维护内存的示例

问题描述 投票:0回答:1

我在数据库连接处理方面有一个特殊的问题,尽管在连接,数据集和数据表的处理方面有很多来回回折,但作为一个新的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编码器,我是否缺少明显的东西(例如我可以将一个类继承到另一个类而不是调用它们?)

我在数据库连接处理方面有一个特殊的问题,尽管在处理连接,数据集和数据表时有很多来回回避,但我还是不太了解……

vb.net
1个回答
0
投票
将这两行添加到您的OpenCon.Dispose()之后完成
© www.soinside.com 2019 - 2024. All rights reserved.