在 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.0
它ACE.OLEDB.12.0
应该可以工作。它确实有效,但是我不明白为什么相同的东西在 dll/exe 中“有效”,因为它在 powershell 中失败了。
然而,我面临的问题是一个完全不同的问题。类似的代码存在于 Web 应用程序(wcf 服务)中。我相信这在框架 3.5 (clr 2.0) 上运行。类似的代码也存在于 Windows 服务中;它失败的地方。