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”参数调用“打开”的异常:“'Microsoft.Jet.OLEDB.4.0' 提供程序未在计算机上注册”

我使用的是 64 位 Ms Windows 2008 Server R2 操作系统。我还看到另一个帖子说如果你改变Jet.OLEDB.4.0ACE.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 回答