Importieren Sie Daten von SQLite zu SQL Server mit SqlBulkCopy-Klasse

sqlbulkcopy sqlite

Frage

Ich versuche, die Daten von SQLite zu SQL Server zu übertragen. Das Schema der Ziel- und Zieltabelle ist identisch:

SQL Server:

CREATE TABLE [dbo].[Shop] (
    [ShopID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](128) NOT NULL,
    [Url] [nvarchar](128) NOT NULL,
PRIMARY KEY CLUSTERED 
(
    [ShopID] ASC
))

und SQLite:

CREATE TABLE "Shop" (
    "ShopID" INTEGER PRIMARY KEY  NOT NULL,
    "Name" VARCHAR NOT NULL,
    "Url" VARCHAR NOT NULL);

Ich habe den Code wie folgt geschrieben (mit System.Data.SQLite):

using (var conn = new SQLiteConnection(@"Data Source=Data.sqlite;FailIfMissing=True"))
{ 
    conn.Open();
    var cmd = new SQLiteCommand("SELECT * FROM Shop", conn);
    var reader = cmd.ExecuteReader();

    using (var bulkCopy = new SqlBulkCopy("Data Source=.;Initial Catalog=Test;Integrated Security=True"))
    {
        bulkCopy.DestinationTableName = "Shop";
        bulkCopy.ColumnMappings.Add("ShopID", "ShopID");
        bulkCopy.ColumnMappings.Add("Name", "Name");
        bulkCopy.ColumnMappings.Add("Url", "Url");
        bulkCopy.WriteToServer(reader);
    }
}

Daten wurden vom Leser geladen (ich habe überprüft). Eine InvalidOperationException löst jedoch die WriteToServer-Methode aus: Das angegebene ColumnMapping stimmt nicht mit einer Spalte in der Quelle oder im Ziel überein.

Irgendwelche Ideen oder Vorschläge für mich?

Beliebte Antwort

Dies kann Ihr Problem lösen oder nicht, aber Sie möchten wahrscheinlich die SqlBulkCopyOptions verwenden, um anzugeben, dass Sie keine neuen Identitätswerte generieren möchten.

SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity))


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