Importer des données de SQLite vers SQL Server avec la classe SqlBulkCopy

sqlbulkcopy sqlite

Question

J'essaie de transférer les données de SQLite vers SQL Server. Le schéma de la table cible et cible est identique:

Serveur SQL:

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

et SQLite:

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

J'ai écrit le code comme ci-dessous (avec 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);
    }
}

Les données ont été chargées par le lecteur (j'ai vérifié). Mais une exception InvalidOperationException renvoie la méthode WriteToServer: ColumnMapping donné ne correspond à aucune colonne de la source ou de la destination.

Des idées ou des suggestions pour moi?

Réponse populaire

Cela peut ou non résoudre votre problème, mais vous souhaiterez probablement utiliser SqlBulkCopyOptions pour indiquer que vous ne souhaitez pas qu'il génère de nouvelles valeurs d'identité.

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


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi