Excel zu SQL. Alternative zu BulkCopy?

c# sql sqlbulkcopy

Frage

Ich habe ein Stück Code, der Daten aus einer Excel-Tabelle in eine MSSQL-Tabelle mit DataReader und SqlBulkCopy kopiert. Es funktionierte gut, bis ich einen Primärschlüssel auf dem Tisch erstellte und jetzt schlägt es fehl. Ich lösche zuerst den Inhalt der SQL-Tabelle, bevor ich ihn wieder mit den Daten von Excel ausfülle.

Da es sich nur um eine kleine Datenmenge handelt, habe ich mich gefragt, ob es dafür einen besseren Weg gibt als die Verwendung von BulkCopy.

Update: Unten ist der relative Code und der Fehler, den ich erhalte, ist: "Der angegebene Wert vom Typ String aus der Datenquelle kann nicht in den Typ Float der angegebenen Zielspalte konvertiert werden."

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);

                    }
                }                 
            }

Akzeptierte Antwort

SqlBulkCopy bildet die Felder automatisch ab. Aber seit Sie einen Primärschlüssel hinzugefügt haben, ist die Standardzuordnung nicht mehr gültig.

Sie müssen ColumnMapping festlegen, um Ihrem SqlBulkCopy-Objekt explizit mitzuteilen, wie die Felder gemappt werden.

Tun Sie dies für alle Ihre Felder, mit Ausnahme des Primärschlüssels (vorausgesetzt, Sie verwenden eine Identität auf dem PK).

Beispielsweise:

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

Beliebte Antwort

Erstellen eines Primärschlüssels schlägt vor, dass Sie eine Domänenbeschränkung durchsetzen (eine gute Sache).

Daher besteht Ihr tatsächliches Problem nicht darin, dass Sie eine andere Methode zum Ausführen der Masseneinfügung benötigen, sondern dass Sie herausfinden müssen, warum Sie doppelte Schlüssel haben (der genaue Grund für die Durchsetzung der PK).



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum