我有一个需要从两个不同的数据库中提取数据,C#应用程序:数据库1是MYOB数据库(它使用ODBC使用MYOB的驱动程序连接)数据库2是Access数据库,再次我使用ODBC连接到它。
例如。 这是我想运行查询:
$query = "SELECT * FROM [" + myobConnectString + "].Accounts, ["+accessConnectString+"].tblTest WHERE tblTest.ID = Accounts.AccountID";
我的问题是我怎么可以运行这个(或如果它甚至有可能)?
谢谢!
除了其他的答案,你可以使用ODBC加入像一个在引擎ODBC-ODBC加入引擎 。 然而,这将拉动本地数据和执行连接对你那么它也有类似的缺点Nickoli概括他的回答结束。
在您编写查询的方式,答案是否定的。 原因很简单,因为查询本身是在一个单一的引擎上运行。 该款发动机将运行查询你写的方式?
如果其中一个数据库服务器必须提供直接访问其他的能力(SQL Server有这个功能,但我忘了此刻的名称),然后单引擎能做到这一点,因为它可以访问其他。
最有可能的,你唯一的办法就是从两个表中的数据加载到应用程序在本地,然后在内存中加入数据。 根据记录的数量,这可能是一个可以接受的解决方案。
有一点要记住的是,由该查询数据库,而不是你的应用程序的数据库上执行。 因此将要执行查询的数据库需要访问其它数据库。
在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
否则,你可以运行使用驱动程序为每个特定数据库的两个单独的查询和执行应用程序的内存的加盟。 您也可以从一个数据库选择,插入在其他数据库临时表,然后运行在该数据库的连接。 这,当然,可以在性能方面代价高昂的操作。