Da Excel a SQL. Alternativa a BulkCopy?

c# sql sqlbulkcopy

Domanda

Ho un pezzo di codice che copia i dati da un foglio di calcolo Excel in una tabella MSSQL utilizzando DataReader e SqlBulkCopy. Ha funzionato fino a quando non ho creato una chiave primaria sul tavolo e ora fallisce. Sto cancellando il contenuto della tabella SQL prima di riempirlo nuovamente con i dati di Excel.

Poiché è solo una piccola quantità di dati che mi sto muovendo, mi sono chiesto se esistesse un modo migliore per farlo rispetto all'utilizzo di BulkCopy?

Aggiornamento: di seguito è riportato il codice relativo e l'errore che ricevo è: "Il valore dato di tipo String dall'origine dati non può essere convertito in tipo float della colonna di destinazione specificata."

using (OleDbConnection connection = new OleDbConnection(excelConnectionString))
            {
                connection.Open();
                OleDbCommand cmd = new OleDbCommand
                ("SELECT Name, Date, Amount FROM ExcelNamedRange", connection);

                using (OleDbDataReader dr = cmd.ExecuteReader())
                {
                    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))
                    {
                        bulkCopy.DestinationTableName = "SqlTable";
                        bulkCopy.WriteToServer(dr);

                    }
                }                 
            }

Risposta accettata

SqlBulkCopy esegue automaticamente la mappatura dei campi. Ma dal momento che hai aggiunto una chiave primaria, il mapping predefinito non è più valido.

Dovrai impostare ColumnMapping per comunicare esplicitamente all'oggetto SqlBulkCopy come mappare i campi.

Fai questo per tutti i tuoi campi, ad eccezione della chiave primaria (supponendo che tu usi un'identità sul PK).

Per esempio:

_bulkCopyEngine.ColumnMappings.Add("fieldname_from", "fieldname_to");

Risposta popolare

Creare una chiave primaria, suggerisce di imporre un vincolo di dominio (una buona cosa).

Pertanto, il tuo problema reale non è che ti serve un altro modo per eseguire l'inserimento di massa, ma devi scoprire perché hai chiavi duplicate (il motivo preciso per far rispettare la PK).



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é