En C#, j'ai du code comme suit :
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();
Ce code s'exécute sans erreur.
La même chose en PowerShell ressemble à quelque chose comme :
$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();
Mais cela provoque une erreur indiquant :
Exception lors de l'appel de "Open" avec "0" argument(s) : "Le fournisseur 'Microsoft.Jet.OLEDB.4.0' n'est pas enregistré sur la machine"
J'utilise un système d'exploitation Windows Server 2008 R2 64 bits. J'ai également lu un autre message disant que si vous changez Jet.OLEDB.4.0
en ACE.OLEDB.12.0
, cela devrait fonctionner. Ça a marché, cependant je ne comprends pas pourquoi la même chose "fonctionne" dans un dll/exe, alors que cela échoue dans PowerShell.
Cependant, le problème auquel je suis confronté est tout à fait différent. Un code similaire est présent dans une application web (service wcf). Je crois que cela s'exécute sur le framework 3.5 (clr 2.0). Un code similaire est également présent dans un service Windows, où cela échoue.