我对编程很陌生,所以我需要一些额外的帮助来解决这个问题。我有一个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位应用程序。
非常感谢任何帮助!
答案 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等的驱动程序。所以这不是你的代码的问题,而是它运行的环境。