У меня две таблицы на двух разных серверах. Эти таблицы имеют одинаковые столбцы, но в другом порядке, и я не могу выполнить массовую копию;
Я пытаюсь сделать
var copier = new SqlBulkCopy(destination_connection);
copier.DestinationTableName = destination_table_name;
foreach (DataColumn column in source_table.Columns) {
var mapping = new SqlBulkCopyColumnMapping(column.ColumnName, column.ColumnName);
copier.ColumnMappings.Add(mapping);
}
copier.WriteToServer(source_table);
но это не помогает мне и InvalidOperationException.
ps Я использую .NET 4.0
ИЗМЕНИТЬ 1:
Исключение составляет
Указанное ColumnMapping не соответствует ни одному столбцу источника данных или адресата.
но я уверен, что все столбцы имеют одинаковое имя и тип. Есть ли способ узнать, какое из сопоставлений вызывает ошибку?
Отвечая на вопрос « Есть ли способ узнать, какое из сопоставлений вызывает ошибку? »
Да, используйте простой процесс устранения. Сначала отобразите только один столбец, используя имена жестко закодированных столбцов. Получите это, чтобы работать. Если вы не можете заставить работать ни один столбец, то есть нечто более фундаментальное. (например, ваша таблица назначения может быть не такой, как вы думаете).
После того, как вы заработаете для одного столбца, добавьте еще несколько столбцов, по одному за раз. Когда он снова начнет сбой, это столбец, у которого есть проблема.
Это то, что я использую для SqlBulkCopy
в моих приложениях
SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionStringSettings.ConnectionString);
bulkCopy.BulkCopyTimeout = 0; // Sets the timeout to unlimited
// Iterates through each column in the datatable
foreach (DataColumn column in table.Columns)
{
// Makes a connection map between the datatable and the database table
bulkCopy.ColumnMappings.Add(column.ColumnName, column.ColumnName);
}
// Sets the desitination table
bulkCopy.DestinationTableName = table.TableName;
bulkCopy.WriteToServer(table);
Я не создаю SqlBulkCopyColumnMapping
; вместо этого я использую перегруженный метод для имен столбцов (хотя это не имеет значения). Имена столбцов в моей таблице точно такие же, как имена столбцов в моих базах данных.
Проверьте, совпадают ли имена или типы столбцов в вашей базе данных с именами столбцов в вашем файле данных. Также убедитесь, что в обоих типах данных и базе данных имеется одинаковое количество столбцов. Если имена столбцов различаются, вы должны вручную добавить сопоставления столбцов
bulkCopy.ColumnMappings.Add("dataTableColumn1", "databaseColumn1");
bulkCopy.ColumnMappings.Add("dataTableColumn2", "databaseColumn2");
...