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?
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\"";
}
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"...
enfin une solution!
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
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é.
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.
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$])
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>
Cela a fonctionné pour moi:
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;HDR=NO;Database=C:\temp\file.xlsx;',[sheetname$])
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