2

2 つの異なるデータベースからデータをプルする必要がある C# アプリケーションがあります。データベース 1 は MYOB データベース (ODBC を使用して MYOB のドライバーを使用して接続します) です。データベース 2 は Access データベースです。

例えば。これは私が実行したいクエリです:

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

私の質問は、これをどのように実行できますか (または可能かどうか)?

ありがとう!

4

3 に答える 3

0

クエリを作成した方法では、答えはノーです。単純な理由は、クエリ自体が単一のエンジンで実行されるためです。あなたが書いた方法でクエリを実行するエンジンはどれですか?

いずれかのデータベース サーバーが他方への直接アクセスを提供できる場合 (SQL Server にはこの機能がありますが、現時点では名前を忘れてしまいました)、1 つのエンジンが他方へのアクセス権を持っているため、これを行うことができます。

ほとんどの場合、唯一の解決策は、両方のテーブルのデータをアプリケーションにローカルにロードしてから、メモリ内のデータを結合することです。レコードの数によっては、これが許容できる解決策になる場合があります。

于 2012-05-13T17:44:02.327 に答える
0

覚えておくべきことの 1 つは、アプリケーションではなく、データベースによってクエリがデータベースで実行されることです。したがって、クエリを実行するデータベースは、他のデータベースにアクセスできる必要があります。

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

それ以外の場合は、特定のデータベースごとにドライバーを使用して 2 つの個別のクエリを実行し、アプリケーションのメモリで結合を実行できます。1 つの DB から選択し、他の DB の一時テーブルに挿入してから、その DB で結合を実行することもできます。もちろん、これはパフォーマンスの点でコストのかかる操作になる可能性があります。

于 2012-05-13T17:55:23.457 に答える
0

他の回答に加えて、ODBC-ODBC Join Engine のような ODBC Join Engine を使用できます。ただし、これはデータをローカルにプルして結合を実行するため、ニコリが回答の最後で概説しているように、同様の欠点があります。

于 2012-05-14T07:41:27.100 に答える