ASP.NETで、すべてのデータをSQL Server 2008r2に格納し、ストアドプロシージャを介してすべてを実行するWebアプリを作成しました。このアプリは、Microsoft Access 2003バックエンド(.MDBファイル)を備えた古いアプリに2〜3個のデータをプッシュしたい部門のデータを収集しています。私の考えは、Accessにリンクされたサーバーを作成して、アプリがすべてをSQLサーバーにプッシュし、そこから処理できるようにすることでした(十分に単純に見えます)。MSDN(こことここ)からの情報に基づいて、私は次のSQLコマンドを使用してリンクサーバーを作成していました。
EXEC sys.sp_addlinkedserver @server = N'CMPtesting' ,
@datasrc = N'\\srv.local\SHAREDOCS\MPS\CMPdata.mdb' ,
@srvproduct = N'Access' ,
@provider = N'Microsoft.Jet.OLEDB.4.0'
これは正常に完了し、CMPtestingサーバーがの下に表示されServer Objects -> Linked Servers
ます。ただし、これを使用してサーバーを検証しようとすると、次のようになります。
SELECT name FROM [CMPtesting].master.sys.databases
または、テーブルを表示するだけでも、エラーが発生します。
OLE DBプロバイダー'Microsoft.Jet.OLEDB.4.0'は、プロバイダーがシングルスレッドアパートメントモードで実行するように構成されているため、分散クエリには使用できません。(Microsoft SQL Server、エラー:7308)
そのエラーを調査すると、「SQL to Accessリンクサーバー」にたどり着きました。これは、いくつかの異なるAccessドライバーをインストールして@provider = N'Microsoft.ACE.OLEDB.12.0'
から、Jetドライバーの代わりに使用することを提案しました。繰り返しますが、これは正常に完了しますが、テーブルを表示しようとすると、別のエラーが発生します。
リンクサーバー「CMPtesting」のOLEDBプロバイダー「Microsoft.ACE.OLEDB.12.0」のインスタンスを作成できません。(Microsoft SQL Server、エラー:7302)
これは単に無効なドライバーエラーではないことを私は知っています。なぜなら、プロバイダー名を作成するだけで、代わりにこれを取得するからです。
OLEDBプロバイダー「foobar」が登録されていません。(Microsoft SQL Server、エラー:7403)
私の検索はすべて、sp_addlinkedserver
追加の詳細やこれらのエラーの助けを借りずに実行する方法をさらに再ハッシュするだけなので、他に何を試すべきかわかりません。