2

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

例如。这是我要运行的查询:

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

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

谢谢!

4

3 回答 3

0

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

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

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

于 2012-05-13T17:44:02.327 回答
0

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

在 Oracle 中,此功能称为数据库链接。这是一篇文章,详细介绍了如何从 Oracle 到 SQL Server 执行此操作:http ://www.dba-oracle.com/t_heterogeneous_database_connections_sql_server.htm

在 SQL Server 中具有相同功能的称为 Linked Servers。这是一篇解释该概念并提供有关如何设置的详细信息的文章:http: //msdn.microsoft.com/en-us/library/ms188279.aspx

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

于 2012-05-13T17:55:23.457 回答
0

除了其他答案之外,您还可以使用 ODBC Join Engine,例如ODBC-ODBC Join Engine中的那个。但是,这将在本地提取数据并为您执行连接,因此它具有与 Nickoli 在其答案末尾概述的相似的缺点。

于 2012-05-14T07:41:27.100 回答