SqlBulkCopy crea più righe che DataTable

.net c# csv datatable sqlbulkcopy

Domanda

Sto usando SqlBulkCopy per importare circa 66k righe da un CSV. Il CSV viene importato in un DataTable e quindi passato al seguente metodo.

Sembra replicare le stesse righe (o resettare una volta raggiunta la fine) indefinitamente nel database. Il debug ha funzionato per circa 30 minuti e ha creato quasi 350k record duplicando ogni riga del DataTable circa 5 volte.

Posso confermare che la quantità di righe nel DataTable è corretta, quindi è necessario che manchi qualcosa, qualche idea?

Nota: ho aggiunto il file s.BatchSize con la speranza che importi solo quell'importo che non è il caso.

  /*
     * StoreImportedData()
     * This method will store all of the imported data from the datatable to the SQL server database.
     * 
     *  
     */

    private Boolean StoreImportedData(DataTable csvFileData)
    {
        try
        {
            using (SqlConnection dbConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
            {
                dbConnection.Open();
                using (SqlBulkCopy s = new SqlBulkCopy(dbConnection))
                {
                    s.DestinationTableName = "Staging";
                    // Amount of rows to issue in the batch: (currently value is around 60k)
                    s.BatchSize = csvFileData.Rows.Count;
                    s.ColumnMappings.Add("remark", "ReportDate");
                    s.ColumnMappings.Add("ipAddress", "IPAddress");
                    s.ColumnMappings.Add("hostName", "HostName");
                    s.ColumnMappings.Add("macAddress", "MacAddress");
                    s.ColumnMappings.Add("deviceName", "PrinterName");
                    s.ColumnMappings.Add("comment", "CenterCode");
                    s.ColumnMappings.Add("userName", "CustomerCode");
                    s.ColumnMappings.Add("userDisplayName", "CustomerName");
                    s.ColumnMappings.Add("printerBlackTotal", "TPrintBw");
                    s.ColumnMappings.Add("printerColorTotal", "TPrintCol");
                    s.ColumnMappings.Add("copyBlackTotal", "TCopyBw");
                    s.ColumnMappings.Add("copyColorTotal", "TCopyCol");
                    s.ColumnMappings.Add("scanTotal", "TScan");
                    s.ColumnMappings.Add("faxBlackTotal", "TFaxBw");
                    s.WriteToServer(csvFileData);
                }
            }
        }
        catch (Exception e)
        {
            throw new Exception("An error has occured with the import SQL operation: " + e.Message);
        }
        return true;
    }
}

Risposta popolare

Prova questo:

s.WriteToServer(csvFileData.CreateDataReader());


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é