Я пытаюсь передать данные из SQLite на SQL Server. Схема целевой и целевой таблицы одинакова:
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
))
и SQLite:
CREATE TABLE "Shop" (
"ShopID" INTEGER PRIMARY KEY NOT NULL,
"Name" VARCHAR NOT NULL,
"Url" VARCHAR NOT NULL);
Я написал код, как показано ниже (с 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);
}
}
Данные загружены читателем (я проверил). Но InvalidOperationException вызывает метод WriteToServer: данный ColumnMapping не соответствует ни одному столбцу в источнике или получателе.
Любые идеи или предложения для меня?
Это может или не может решить вашу проблему, но вы, вероятно, захотите использовать SqlBulkCopyOptions, чтобы указать, что вы не хотите, чтобы он генерировал новые идентификационные значения.
SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity))