在 64 位 VB .Net 应用程序中连接到 32 位 MS Access 数据库
Connect to 32-Bit MS Access DB in a 64-Bit VB .Net application
我对编程还很陌生,所以我需要一些额外的帮助来解决这个问题。我有一个 VB .NET 应用程序,它为 64 位应用程序提供了一个插件。我要完成的任务是打开到 32 位 MS Access 数据库的连接并从 table 中查找数据。它的不足之处在于 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 位应用程序。
非常感谢任何帮助!
我们遇到了同样的问题并按照 the instructions found here 解决了它(查找标题为 "The Solution" 的部分)。在那里你会找到一个 link 到你需要安装的适当的 driver。
安装似乎是必要的,因为在 Office 2010 中,Microsoft 更改了用于访问 Access 的 driver、Excel 等。所以这不是你代码的问题,而是它运行环境的问题。
感谢 jmcilhinney 帮助解决了这个问题。阅读问题下的评论,看看我们是如何得出这个解决方案的。
解决方案:通过 TCP 套接字连接使用进程间通信,您可以来回传递数据,而无需考虑主机和客户端的位。在这种情况下,为另一个软件的加载项编写的 64 位 vb .net 程序可以设置使用 Process.Start
的 TcpClient
首先 运行 一个 TcpListener
在为 x86 平台开发的控制台应用程序中,然后发送用于数据库通信的侦听器信息。作为 32 位控制台应用程序的侦听器能够找到并使用 32 位提供程序进行 OLEDB 连接,并从 Access DB 中提取所需的数据。然后将数据发送回 64 位应用程序中的客户端。
对于 TCP 套接字连接,您可以在 vb.net 的 client/server TCP 连接上使用简单的 YouTube 教程。
为了发送数据,我使用了分隔符,以便可以使用 Split
.
在另一端轻松分隔数据
我对编程还很陌生,所以我需要一些额外的帮助来解决这个问题。我有一个 VB .NET 应用程序,它为 64 位应用程序提供了一个插件。我要完成的任务是打开到 32 位 MS Access 数据库的连接并从 table 中查找数据。它的不足之处在于 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 位应用程序。
非常感谢任何帮助!
我们遇到了同样的问题并按照 the instructions found here 解决了它(查找标题为 "The Solution" 的部分)。在那里你会找到一个 link 到你需要安装的适当的 driver。
安装似乎是必要的,因为在 Office 2010 中,Microsoft 更改了用于访问 Access 的 driver、Excel 等。所以这不是你代码的问题,而是它运行环境的问题。
感谢 jmcilhinney 帮助解决了这个问题。阅读问题下的评论,看看我们是如何得出这个解决方案的。
解决方案:通过 TCP 套接字连接使用进程间通信,您可以来回传递数据,而无需考虑主机和客户端的位。在这种情况下,为另一个软件的加载项编写的 64 位 vb .net 程序可以设置使用 Process.Start
的 TcpClient
首先 运行 一个 TcpListener
在为 x86 平台开发的控制台应用程序中,然后发送用于数据库通信的侦听器信息。作为 32 位控制台应用程序的侦听器能够找到并使用 32 位提供程序进行 OLEDB 连接,并从 Access DB 中提取所需的数据。然后将数据发送回 64 位应用程序中的客户端。
对于 TCP 套接字连接,您可以在 vb.net 的 client/server TCP 连接上使用简单的 YouTube 教程。
为了发送数据,我使用了分隔符,以便可以使用 Split
.