2010-05-04 5 views
0

J'ai le codeObtenir cette erreur en lisant Excel

string conn = @"Provider=Microsoft.ACE.OLEDB.12.0;DSN=Excel Files;DBQ=" + strSheetPath + @";DriverId=1046;FIL=excel 12.0;MaxBufferSize=2048;PageTimeout=5;"; 
//string conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strSheetPath +";Extended Properties=Excel 12.0 Xml;HDR=YES;IMEX=1"; 
string destinationConnectionString = ConfigurationManager.ConnectionStrings["KGD6DBConnectionString"].ConnectionString; 
string query = "Select * From [Sheet1$]"; 

using (var myConnection = new OleDbConnection(conn)) 
using (var destinationConnection = new SqlConnection(destinationConnectionString)) 
using (var bulkCopy = new SqlBulkCopy(destinationConnection)) 
{ 
    //Map first column in source to second column in sql table (skipping the ID column). 
    //Excel schema[CompanyName,Phone] Table schema[ShipperID, CompanyName, Phone] 
    bulkCopy.ColumnMappings.Add(0, 1); 
    bulkCopy.ColumnMappings.Add(1, 2); 
    bulkCopy.ColumnMappings.Add(2, 3); 
    bulkCopy.ColumnMappings.Add(3, 4); 
    bulkCopy.ColumnMappings.Add(4, 5); 
    bulkCopy.ColumnMappings.Add(5, 6); 
    bulkCopy.ColumnMappings.Add(6, 7); 
    bulkCopy.ColumnMappings.Add(7, 8); 
    bulkCopy.ColumnMappings.Add(8, 9); 
    bulkCopy.ColumnMappings.Add(9, 10); 
    bulkCopy.ColumnMappings.Add(10, 11); 
    bulkCopy.ColumnMappings.Add(11, 12); 
    bulkCopy.ColumnMappings.Add(12, 13); 
    bulkCopy.ColumnMappings.Add(13, 14); 
    bulkCopy.ColumnMappings.Add(14, 15); 
    bulkCopy.ColumnMappings.Add(15, 16); 
    bulkCopy.ColumnMappings.Add(16, 17); 
    bulkCopy.ColumnMappings.Add(17, 18); 
    bulkCopy.ColumnMappings.Add(18, 19); 
    bulkCopy.ColumnMappings.Add(19, 20); 
    bulkCopy.ColumnMappings.Add(20, 21); 
    bulkCopy.ColumnMappings.Add(21, 22); 
    bulkCopy.ColumnMappings.Add(22, 23); 
    bulkCopy.ColumnMappings.Add(23, 24); 

    bulkCopy.DestinationTableName = "dbo.sampleInventory"; 

    using (var myCommand = new OleDbCommand(query, myConnection)) 
    { 
     myConnection.Open(); 
     destinationConnection.Open(); 

     var myReader = myCommand.ExecuteReader(); 
     while (myReader.Read()) 
     { 
      bulkCopy.WriteToServer(myReader); 
     } 
    } 
} 
return (new DataTable()); 

obtenir erreur sur la ligne d'ouverture de connexion.

Erreur: Impossible de trouver l'ISAM installable.

+1

Vous ne disposez pas d'une erreur; vous avez une exception. Mettez un bloc try/catch autour de tout; puis dans le bloc catch, récupère la valeur de ex.ToString() et publie-la ici. –

+0

C'est la même ligne que j'ai eue. Lorsque j'essaie d'attraper l'exception interne, il me donne une exception nulle de référence d'objet. –

Répondre

0

Assurez-vous que vous construisez l'application 32 bits, sinon est-ne devrait pas travailler parce que Microsoft.ACE.OLEDB.12.0 est uniquement pour les plates-formes x86

Si cela ne va pas à l'http://support.microsoft.com/kb/209805

+0

Ok, mais comment se fait-il que je sois en train de construire une application 32 bits? steps please –

+0

Pour les projets C#, vous trouverez cette option dans la boîte de dialogue Propriétés du projet sous l'onglet Construction. Pour les projets VB.net, le paramètre se trouve dans la boîte de dialogue Paramètres avancés du compilateur, disponible via le bouton Options avancées de compilation dans l'onglet Compiler des propriétés du projet. La liste des options disponibles sont: 1. Tout CPU 2. x86 3. x64 Si vous souhaitez voir tous "l'architecture du processeur" disponible télécharger l'extension suivante: http://visualstudiogallery.msdn.microsoft .com/fr-us/36a6eb45-a7b1-47c3-9e85-09f0aef6e879 –

0

Il semblerait que le composant permettant de demander des données Excel en tant que base de données soit manquant ou mal enregistré sur votre machine.

Il y a quelques instructions à ce lien qui peuvent aider: http://support.microsoft.com/kb/209805

+0

J'ai essayé, je ne travaillais pas pour moi –