Comment résoudre " N'a pas pu trouver ISAM installable."d'erreur pour le fournisseur OLE DB "de Microsoft.ACE.OLEDB.12.0"

j'essaie d'importer des données à partir D'Excel 2007 (.xlsx) dans SQL Server 2008 en utilisant une commande T-SQL OpenRowset () avec le "Microsoft.ACE.OLEDB.12.0" fournisseur OLE DB, et je reçois un persistant "impossible de trouver ISAM installable" erreur. Tout le matériel est en 32 bits.

[Révisée 1/10/12 pour essayer de se concentrer davantage sur les anomalies]

L'instruction T-SQL suivante génère l'erreur:

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
    'Data Source=C:workTestData.xlsx;Extended Properties="Excel 12.0 XML;HDR=YES"',
    'SELECT * FROM [Sheet1$]'
)

si je sauve le fichier Excel dans le Format "Excel 97-2003" (.xls) et utiliser l'ancien de Microsoft.Jet.OLEDB.4.0 fournisseur pour importer les données, il fonctionne très bien. Cela me fait penser que ce n'est pas une question de sécurité ou d'environnement.

SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
    'Excel 8.0;Database=C:workTestData.xls;HDR=YES', 
    'SELECT * FROM [Sheet1$]'
)

Cependant, lorsque j'essaie de l' *.fichier XLS avec Microsoft.ACE.OLEDB.12.0 qui doit être rétrocompatible avec le *.xls format, il échoue à nouveau avec le même message d'erreur:

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
    'Data Source=C:workTestData.xls;Extended Properties="Excel 8.0;HDR=YES";', 
    'SELECT * FROM [Sheet1$]'
)

aussi, ce qui est intéressant, quand j'utilise les données D'importation du SSMS..."l'assistant, il fonctionne très bien. J'ai enregistré la sortie de l'Assistant D'importation de données comme un paquet SSIS et j'ai regardé dans le fichier SSIS pour essayer de comprendre comment il fonctionne, et il utilise avec succès le Microsoft.ACE.OLEDB.12.0 fournisseur. C'est la chaîne de connexion du paquet SSIS:

<DTS:Property DTS:Name="ConnectionString">
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:workTestData.xlsx;Extended Properties="Excel 12.0 XML;HDR=YES";
</DTS:Property>

j'ai aussi fait la configuration appropriée du serveur SQL pour permettre la requête distribuée OPENROWSET:

sp_configure 'show advanced options', 1
reconfigure
GO
sp_configure 'Ad Hoc Distributed Queries', 1
reconfigure
GO

si j'ai aussi défini les valeurs suivantes *sp_MSset_oledb_prop* (que j'ai trouvées dans un post quelque part)...

USE [master] 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 
GO 

...puis l'erreur change en "erreur non spécifiée":

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "Unspecified error".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

cependant, je ne suis pas sûr qu'il s'agisse d'une erreur en amont ou en aval. (Trouve-t-il maintenant le "ISAM installable" mais tombe-t-il en panne par la suite?)

j'ai essayé avec plusieurs fichiers Excel sur deux machines/OS (Windows Server 2003, Windows XP SP3). Les deux machines sont à 32 bits.

j'ai aussi essayé de réinstaller les bureaux 2007 et 2010 versions de AccessDatabaseEngine.exe (http://www.microsoft.com/download/en/details.aspx?id=23734 et http://www.microsoft.com/download/en/details.aspx?id=13255, respectivement), en vain.

Pour résumer:

  • "de Microsoft.Jet.OLEDB.4.0" fournisseur fonctionne à l'aide de T-SQL, mais "de Microsoft.ACE.OLEDB.12.0" ne fonctionne pas.
  • "de Microsoft.ACE.OLEDB.12.0 "fonctionne avec les" données D'importation..."assistant (autant que je peux dire à partir de la fichier de tâches SSIS sauvegardé).
  • paramétrer les propriétés" AllowInProcess "et" DynamicParameters "à" 1 "Change l'erreur en"Unspecified error". (Est-ce un pas en avant?!)

des idées?

16
demandé sur Martin_ATS 2012-01-10 06:48:57

9 réponses

ESSAYEZ ceci peut vous aider:

set path et strFileType selon l'exigence

      string connString = "";
//    string strFileType = Path.GetExtension(UpfileName.FileName).ToLower();
//    string path = UpfileName.PostedFile.FileName;

if (strFileType.Trim() == ".xls")
   {

      connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
   }
   else if(strFileType.Trim() == ".xlsx")
    {
            connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
    }
1
répondu Sagar R 2014-01-30 10:04:52

j'ai résolu avec cette requête:

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
    'Excel 12.0;HDR=NO;Database=D:\Filename.xlsx;', 
    [SheetName$])

il semble que sql n'aime pas la section" Propriétés étendues"...

0
répondu Frenk 2013-05-29 08:22:56

enfin une solution!

Check this out:Msg 7302, Niveau 16, État 1, Ligne 1 Impossible de créer une instance de Fournisseur OLE DB "de Microsoft.ACE.OLEDB.12.0" du serveur lié "(null)"

en gros, vous allez à

Panneau De Contrôle > Outils Administratifs > Services Composants

puis développez

Services de Composants > Ordinateurs > poste de travail > DCOM Config

trouver

MSDAINITIALIZE

propriétés > sécurité > Autorisations de lancement et D'Activation

cliquez sur

Personnaliser > Éditer...

ajouter votre nom d'utilisateur ou "tout le monde" si vous préférez

cochez toutes les cases" Autoriser " pour le nouvel utilisateur / groupe

et appuyez sur OK sur les deux pages

maintenant voir si votre commande OpenRowSet / OpenDataSource fonctionne

merci à Ramesh Babu Vavilla (vr.babu) de social.technet.microsoft.com pour le lien

0
répondu Hamido-san 2014-05-19 10:30:01

en assurant des cotations autour de la section de propriétés étendues de la chaîne de connexion l'a fixé pour moi. J'avais ajouté une propriété supplémentaire et ne migrent pas la citation à la fin de ma nouvelle propriété.

0
répondu Aaronius 2018-07-11 17:53:09

je pense que la réponse se cache dans le paquet SSIS que vous avez posté. Le nouveau format de fichier xlsx, stocke les données dans le format XML au lieu de l'ancien format. Regardez de nouveau. Il lit... Extended Properties= " Excel 12.0 XML;HDR=YES

ne manquez pas ce XML après les trucs standards. (Pour ce que ça vaut, j'ai aussi lu que vous avez besoin de "Excel 12.0 Macro" pour vous connecter avec un fichier xslm.)

lui Donner un essai. Bizarre, mais espérons que cela fonctionne.

-1
répondu IHateScreenNamesToo 2012-04-27 18:16:58

Essayez Ceci

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
                'EXCEL 12.0;DataBase=C:\TEMP\test.xlsx;Extended Properties="EXCEL 12.0 Xml;HDR=YES', [Sheet1$])
-1
répondu Gurm 2013-02-26 17:01:05
Hai am aussi fait face à cette situation je l'ai résolu

Résolu

string ConeectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + txtFlp.Text 

    + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\"");

                OleDbConnection oconn = new OleDbConnection(ConeectionString);</b>
-1
répondu user4049619 2014-09-17 09:03:29

Cela a fonctionné pour moi:

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
   'Excel 12.0;HDR=NO;Database=C:\temp\file.xlsx;',[sheetname$])
-1
répondu Simon Turner 2017-07-18 11:46:17

Si vous faites tout ce post, et de continuer à te erreur. essayez d'assigner permisiton sur le dossier pdf, au compte

NT Service\MSSQLSERVER
NT Service\SQLSERVERAGENT

fonctionne pour moi

-2
répondu Fernando Cifuentes Perez 2018-07-30 18:34:59