script operazione bulkcopy da Excel a Sql Server 2008. Riga mancante

excel excel-2007 sqlbulkcopy sql-server ssis

Domanda

Attualmente sto caricando i dati da un foglio di lavoro di Excel che ha un'intestazione per una tabella in SQL server. Sto utilizzando un'attività di script in SSIS. Tutto funziona bene, tranne che non carica la prima riga dopo l'intestazione. Se sposto la riga verso il basso del foglio di lavoro, viene caricata correttamente. Qualche idea?

Quello che segue è il codice che sto usando:

string excelconnectionstring = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source =" + fullPath + "; Proprietà estese = \" 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;
        }

Risposta accettata

Ok, quindi ho risolto questo problema cambiando il metodo che stavo impiegando. Ora tutto funziona perfettamente.

Ho usato un adattatore dati invece come segue. Ancora non so perché il codice precedente non ha funzionato correttamente

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

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

            bulkcopy.WriteToServer(dataTable);


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché