【问题标题】:Subroutine to connect to MS Access database连接 MS Access 数据库的子程序
【发布时间】:2010-01-26 22:17:03
【问题描述】:

我有这个子程序设置来连接到 MS Access 数据库:

Public Sub MakeDBConnection(ByVal source As String)
    Try
        cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & source & ";")
        cn.Open()
    Catch e As Exception
        ReportError("CRITICAL", e.Message)
    End Try
End Sub

它在一个模块中,并且在它使用的模块中使用它的任何函数,但是,当我尝试从 Main.vb (我的主要形式)使用它时,它似乎没有做任何事情,就像任何尝试执行 SQL 查询返回错误,提示我必须初始化连接。

我尝试将它使用的所有变量都设置为 Public,但它不起作用。也许我需要退货?我不知道。

感谢任何帮助,谢谢。

【问题讨论】:

  • CN在哪里定义?如果它是一个全局变量,那么这是一种非常糟糕的方法,它要求您打开与数据库的连接。
  • 但 Jet 更喜欢重复使用的单个连接,特别是因为在打开连接时创建 LDB 文件的开销很大。当然,这不是不仔细管理连接的理由,但使用单个持久连接实际上是 Jet 的性能增强器,也是一种完全有效的做法。

标签: vb.net ms-access subroutine


【解决方案1】:

问题是变量 cn 的范围是 Sub 本地的。您应该将其更改为 Function 并返回 OleDbConnection 对象。所以代码看起来像这样:

Public Function MakeDBConnection(ByVal source As String) As OleDbConnection
    Try
        Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & source & ";")
        cn.Open()

        Return cn

    Catch e As Exception
        ReportError("CRITICAL", e.Message)
    End Try
End Function

调用代码如下所示:

' For example:
myOleDbCommand.Connection = MakeDBConnection(source)

如果适合您的架构,还可以考虑从数据源的 app.config 文件中读取 MakeDBConnection 函数。

【讨论】:

  • 我对语法进行了编辑以实际调暗 cn 变量:)
  • 能否将 cn 设为静态变量并仅在尚未初始化的情况下对其进行初始化?您可能需要一种关闭它的机制(例如,一个可选参数)。
猜你喜欢
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-30
  • 2018-03-11
相关资源
最近更新 更多