3

そのため、Microsoft Access MDB ファイルや Excel スプレッドシートなどのデータ ソースを照会するためのMicrosoft.Jet.OLEDB.4.0データ プロバイダーは、Windows 64 ビット オペレーティング システムでは機能しないことを知りました。

x86 環境と x64 環境の両方で互換性を確保するために、.NET 3.5 (C#) アプリケーションでこれらのファイル タイプに対してクエリを実行するには、何を使用する必要がありますか? 私はインターネットを精査しましたが、この非互換性を処理する方法について明確な答えを見つけることができないようです.

また、x64 環境で使用した場合に Microsoft.JET.OLEDB.4.0 プロバイダーが行うのと同じ例外をスローするように見えるため、ODBC プロバイダーと MSDASQL プロバイダーを使用してみましたが、うまくいきませんでした (私がひどく間違ったことをしていない限り)これらの他の 2 つのプロバイダーは、私の Windows XP x86 環境では正常に動作しますが)。

x64 システムでの ODBC 接続には%WINDIR%\System32\odbcad32.exeを使用する必要があると言っている人を見つけましたが、これを利用する方法を考えています。

x64 でスローされる例外の例:

************** 例外テキスト ************** System.InvalidOperationException: The 'Microsoft.Jet.OLEDB.4.0' provider is not registered onローカル マシン。System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString コンストラクター、DataSourceWrapper& datasrcWrapper) で System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString コンストラクター、OleDbConnection 接続) で System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions オプション、オブジェクト) poolGroupProviderInfo、DbConnectionPool プール、DbConnection owningObject)

4

3 に答える 3

3

ここで起きていることは、x64 アセンブリが x86 COM コンポーネントを呼び出そうとしていることです。COM 登録は wow6432node ハイブにあるため、x64 アプリはプライマリ x64 レジストリに表示されません。

最も簡単な回避策は、x86 ターゲット プラットフォームでアプリケーションをビルドし、後で x64 マシンの WOW で実行することです。アプリは 32​​ ビットとして実行され、必要な 32 ビット COM オブジェクトを表示できます。

于 2008-12-30T17:19:04.570 に答える
2

私自身の最近の調査で見たすべてのことは、あなたが見ていることを裏付けています - 単純に 64 ビットの Jet ドライバーが存在しないということです。また、THISスレッドで、64 ビット MSDASQL は単なるラッパーであるため役に立たないことを確認しているように見える投稿を見つけました (Ricky Wen による 5 月 8 日付の最後の投稿を参照してください)。唯一のオプションは、32 ビット プロキシ、おそらく別の 32 ビット SQL サーバーを介してリンクすることです。Jet データを SQL に移行できるようになるまで、自分でこれを行うことになるかもしれません。

于 2008-12-30T17:13:33.910 に答える
1

JetSQL用の64ビットODBCドライバーがあります。これは、Microsoft Access DatabaseEngine2010再頒布可能パッケージです。OLEDBには使用していませんが、PowerShellを使用して新しいMicrosoftAccessデータベースを作成するために使用しました。

于 2011-08-24T15:04:26.107 に答える