2

C# では、次のようなコードがあります。

OleDbConnection cxn = New OleDbConnection();
cxn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='text;HDR=Yes;FMT=Delimited(,)';Data Source=" + System.IO.Path.GetDirectoryName(csvFilePath);
cxn.Open();
cxn.Close();

このコードはエラーなしで実行されます。

powershell の同じことは次のようになります。

$cxn = new-object System.Data.OleDb.OleDbConnection
$cxn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='text;HDR=Yes;FMT=Delimited(,)';Data Source=" + [System.IO.Path]::GetDirectoryName($csvFilePath);
$cxn.Open();
$cxn.Close();

しかし、上記のエラーは次のように表示されます。

"0" 個の引数で "Open" を呼び出す例外: "'Microsoft.Jet.OLEDB.4.0' プロバイダーがマシンに登録されていません"

64 ビットの Ms Windows 2008 Server R2 オペレーティング システムを使用しています。Jet.OLEDB.4.0また、変更するACE.OLEDB.12.0と機能するはずだという別の投稿に出くわしました。それは機能しましたが、同じものがdll/exeで「機能する」理由がわかりません.powershell内で失敗します。

しかし、私が直面している問題はまったく別の問題です。同様のコードが Web アプリケーション (wcf サービス) に存在します。これはフレームワーク 3.5 (clr 2.0) で動作すると思います。同様のコードが Windows サービスにも存在します。失敗するところ。

4

1 に答える 1

1

これは、64 ビット Powershell から Microsoft Jet 4.0 (32 ビットのみをサポート) を使用しているために発生しています。32 ビットの Powershell (「$env:WINDIR\syswow64\windowspowershell\v1.0\powershell.exe」にあります) から同じコマンドを実行してみてください。

IIS で機能する理由は、アプリケーション プールが 32 ビット アプリケーションの実行を許可するように設定されているためです。

于 2012-12-27T15:58:24.167 に答える