x64 OSでのC#を使用したJetデータベース/ Excelファイルのクエリ

StackOverflow https://stackoverflow.com/questions/400684

  •  03-07-2019
  •  | 
  •  

質問

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

.x 3.5および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: 'Microsoft.Jet.OLEDB.4.0'プロバイダーがローカルコンピューターに登録されていません。      System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString constr、DataSourceWrapper& datasrcWrapper)で      System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr、OleDbConnection接続)      System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptionsオプション、オブジェクトpoolGroupProviderInfo、DbConnectionPoolプール、DbConnection owningObject)で

役に立ちましたか?

解決

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

他のヒント

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

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

現在、JetSQL用の64ビットODBCドライバーがあります。 Microsoft Access Database Engine 2010再頒布可能です。 OLEDBには使用していませんが、新しい Microsoft AccessデータベースとPowerShell を作成するために使用しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top