在64位VB .Net应用程序中连接到32位MS Access DB

时间:2015-12-09 03:49:17

标签: vb.net ms-access-2010

我对编程很陌生,所以我需要一些额外的帮助来解决这个问题。我有一个VB .NET应用程序,它为64位应用程序提供了一个加载项。我正在尝试完成的任务是打开与32位MS Access数据库的连接并从表中查找数据。在这种情况下,64位应用程序无法与32位数据库连接。你可以从我的解释中说出我几乎不知道我在说什么。

我对此主题所做的一切都得出了相同的结论,我需要使用进程间通信,但不解释如何完成此操作以及我需要做些什么来实现这一点。

这是我在VB .Net应用程序中的连接设置:

Public Class MSDatabase
    Dim provider As String
    Dim dataFile As String
    Dim connString As String
    Public myConnection As OleDbConnection = New OleDbConnection
    Public dr As OleDbDataReader

    Public Sub LoadDatabase()
        provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source ="
        dataFile = "\\server3\databases\Quotes.accdb"
        connString = provider & dataFile
        myConnection.ConnectionString = connString
    End Sub

    Public Function LookUpPart(D As Double, E As Double, F As Double, G As Double, Grade As String) As Boolean

        myConnection.Open()
        Dim str As String
        str = "SELECT PartNumber, D, E, F, G, Grade FROM Parts"
        Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
        dr = cmd.ExecuteReader
        While dr.Read()
            If D = dr("D") And E = dr("E") And F = dr("F") And G = dr("G") And Grade = dr("Grade") Then
                Return True
            End If
        End While
        myConnection.Close()
        Return False
    End Function
End Class

当我尝试使用错误消息打开连接时失败,指出提供程序Microsoft.ACE.OLEDB.12.0未在本地计算机上注册。

我想知道的是如何使用进程间通信将其设置为从我的64位应用程序调用的32位应用程序。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

感谢jmcilhinney帮助解决此问题。阅读问题下的评论,看看我们是如何达成这个解决方案的。

解决方案:通过TCP套接字连接使用进程间通信,无论主机和客户端的位置如何,都可以来回传递数据。在这种情况下,为其他软件的加载项编写的64位vb .net程序可以设置TcpClient使用Process.Start在开发的控制台应用程序中首次运行TcpListener对于x86平台,然后发送监听器信息以进行数据库通信。作为32位控制台应用程序的侦听器能够找到并使用32位提供程序进行OLEDB连接,并从Access DB中提取所需的数据。然后,数据将在64位应用程序中发送回客户端。

对于TCP套接字连接,您可以在vb.net的客户端/服务器TCP连接上使用简单的YouTube教程。

为了发送数据,我使用了分隔符,以便可以使用Split轻松地在另一端分隔数据。

答案 1 :(得分:0)

我们遇到了同样的问题并按照the instructions found here解决了问题(查找标题为“解决方案”的部分)。在那里,您将找到需要安装的相应驱动程序的链接。

安装似乎是必要的,因为Office 2010 Microsoft更改了访问Access,Excel等的驱动程序。所以这不是你的代码的问题,而是它运行的环境。