C# - 使用不同的ODBC驱动程序连接来自两个不同数据库的表

时间:2012-05-13 17:03:23

标签: c# database odbc myob

我有一个C#应用程序需要从两个不同的数据库中提取数据: 数据库1是一个MYOB数据库(使用ODBC连接使用MYOB的驱动程序) 数据库2是一个Access数据库,我再次使用ODBC连接它。

EG。这是我想要运行的查询:

$query = "SELECT * FROM [" + myobConnectString + "].Accounts, ["+accessConnectString+"].tblTest WHERE tblTest.ID = Accounts.AccountID";

我的问题是如何运行它(或者如果可能的话)?

谢谢!

3 个答案:

答案 0 :(得分:0)

在你编写查询的方式中,答案是否定的。原因很简单,因为查询本身是在单个引擎上运行的。哪个引擎会以您编写的方式运行查询?

如果任一数据库服务器能够提供对另一个的直接访问(SQL Server具有此功能但我现在忘记了该名称),那么单个引擎可以执行此操作,因为它可以访问另一个。

最有可能的是,您唯一的解决方案是将两个表中的数据加载到本地应用程序中,然后将数据加入内存中。根据记录的数量,这可能是一个可接受的解决方案。

答案 1 :(得分:0)

要记住的一件事是查询是由数据库而不是您的应用程序在数据库上执行的。因此,将执行查询的数据库需要具有对其他数据库的访问权限。

在Oracle中,此功能称为数据库链接。这篇文章提供了有关如何从Oracle到SQL Server执行此操作的详细信息:http://www.dba-oracle.com/t_heterogeneous_database_connections_sql_server.htm

在SQL Server中具有相同的功能称为链接服务器。这篇文章解释了这个概念,并提供了有关如何进行设置的详细信息:http://msdn.microsoft.com/en-us/library/ms188279.aspx

否则,您可以使用每个特定数据库的驱动程序运行两个单独的查询,并在应用程序的内存中执行连接。您还可以从一个DB中进行选择,插入另一个DB中的临时表,然后在该DB上运行连接。当然,这在性能方面可能是昂贵的操作。

答案 2 :(得分:0)

除了其他答案,您还可以使用类似ODBC-ODBC Join Engine的ODBC加入引擎。但是,这将在本地提取数据并为您执行连接,因此它与Nickoli在答案结束时概述了类似的缺点。