copie en bloc de la tâche de script d'Excel vers Sql Server 2008. Ligne manquante

excel excel-2007 sqlbulkcopy sql-server ssis

Question

Je charge actuellement des données à partir d'une feuille de calcul Excel comportant un en-tête dans une table dans SQL Server. J'utilise une tâche de script dans SSIS. Tout fonctionne bien sauf qu'il ne charge pas la première ligne après l'en-tête. Si je déplace la ligne au bas de la feuille de calcul, il se charge correctement. Des idées?

Voici le code que j'utilise:

string excelconnectionstring = "Fournisseur = Microsoft.ACE.OLEDB.12.0; Source de données =" + parcours complet + "; Propriétés étendues = \" Excel 12.0; HDR = YES; IMEX = 1 \ "";

OleDbConnection oledbconn = new OleDbConnection (excelconnectionstring); Dts.Variables ["User :: FileLoaded"]. Value = false;

        try
        {
            OleDbCommand oledbcmd = new OleDbCommand(exceldataquery, oledbconn);
            oledbconn.Open();
            OleDbDataReader dr = oledbcmd.ExecuteReader();


            SqlBulkCopy bulkcopy = new SqlBulkCopy(sqlconnectionstring);
            bulkcopy.BatchSize = 1000;
            bulkcopy.DestinationTableName = sqltable;

            while (dr.Read())
            {
                bulkcopy.WriteToServer(dr);
            }

            Dts.Variables["User::FileLoaded"].Value = true;
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Data + " " + e.InnerException + " " + e.Message + " " + e.Source);           
            Dts.Variables["User::FileLoaded"].Value = false;
        }
        finally
        {
            oledbconn.Close();
            Dts.TaskResult = (int)ScriptResults.Success;
        }

Réponse acceptée

Ok, j'ai donc résolu le problème en changeant la méthode que j'utilisais. Maintenant tout fonctionne parfaitement.

J'ai utilisé un adaptateur de données à la place comme suit. Je ne sais toujours pas pourquoi le code précédent n'a pas fonctionné correctement

OleDbDataAdapter adaptateur = new OleDbDataAdapter (exceldataquery, oledbconn); adapter.Fill (dataTable);

            SqlBulkCopy bulkcopy = new SqlBulkCopy(sqlconnectionstring);
            bulkcopy.BatchSize = 1000;
            bulkcopy.DestinationTableName = sqltable;

            bulkcopy.WriteToServer(dataTable);


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi