【问题标题】:Finding the correct OleDb connection string VB.Net找到正确的 OleDb 连接字符串 VB.Net
【发布时间】:2013-01-19 21:11:14
【问题描述】:

我正在旧 XP 机器上创建一个 32 位应用程序,该应用程序也将在 Win7 或更高版本上运行。

所以我正在尝试测试什么连接字符串可以工作。如:

Private Function test_ace_or_jet(ByVal mdb_path As String) As String
        Dim connString As String
        Dim dbMaintPort As OleDb.OleDbConnection

        connString = ""

        Try
            connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & mdb_path

            dbMaintPort = New OleDb.OleDbConnection(connString)
            dbMaintPort.Open()

            dbMaintPort.Close()

            MsgBox("1 was found")
        Catch ex As Exception
            MsgBox("Could not open 1" & vbCrLf & vbCrLf & ex.Message)
            Try
                connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mdb_path
                dbMaintPort = New OleDb.OleDbConnection(connString)
                dbMaintPort.Open()
                dbMaintPort.Close()

                MsgBox("2 was found")
            Catch ex2 As Exception
                connString = ""
                MsgBox("Could not open 2" & vbCrLf & vbCrLf & ex2.Message)
            End Try
        End Try
        test_ace_or_jet = connString
    End Function

但是我发现的问题是在 XP 机器上,第一个连接字符串不会失败。它根本没有安装 ACE。

如何测试是否使用其中一种?我能否获得上述函数来给我正确的连接字符串?

【问题讨论】:

    标签: vb.net connection-string oledb oledbconnection


    【解决方案1】:

    如果你一直在尝试/捕捉直到你找到一些东西,你可能会把自己嵌套得很深......你可能会更好(在测试时),做一个循环并有一个类似的连接字符串数组

    Private Function test_ace_or_jet(ByVal mdb_path As String) As String
       Dim connString As String
       Dim dbMaintPort As OleDb.OleDbConnection
       Dim ValidConnection As Boolean
       Dim finalConnection As String
       Dim connStrings(2) As String
       connStrings(0) = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & mdb_path
       connStrings(1) = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mdb_path
       connStrings(2) = "AnyOtherProviderTestConnectionStrings..."
    
       ValidConnection = False
       For value As Integer = 0 To 2
          Try
             dbMaintPort = New OleDb.OleDbConnection(connStrings(value))
             dbMaintPort.Open()
             dbMaintPort.Close()
    
             MsgBox("Success: " & connStrings(value))
             ValidConnection = True
             finalConnection = connStrings(value)
          Catch 
          End Try
    
          if ValidConnection
             exit
          endif 
    
       Next
    
       ; continue with whatever else you want to do with test result and final string
    
    End Function
    

    另外,您看过 ConnectionStrings.com 吗?他们可能会为您提供更多选项,以及用于测试不同提供商等的连接示例。

    【讨论】:

    • 嗨@DRapp,这更优雅我会使用它!但是,这并不能解决连接到 ACE 引擎时不会失败的问题。我正在测试的 XP 机器没有 ACE,但它接受它作为有效的连接字符串,它甚至打开数据库。我需要以某种方式测试 ACE 是否可用。
    • 汉克,您说您没有安装 ACE...但是,这可能来自其他软件,例如 Office/Access...您是否检查过类似 C:\Program Files\Common文件\Microsoft Shared\OFFICE14\ACEOLEDB.DLL
    • 嗨@DRapp,刚刚检查过,你是对的,我有两个......坚果!
    猜你喜欢
    • 2014-03-31
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2013-09-15
    相关资源
    最近更新 更多