Excel для SQL. Альтернатива BulkCopy?

c# sql sqlbulkcopy

Вопрос

У меня есть фрагмент кода, который копирует данные из таблицы Excel в таблицу MSSQL с использованием DataReader и SqlBulkCopy. Он работал нормально, пока я не создал первичный ключ на столе, и теперь он терпит неудачу. Сначала я удаляю содержимое таблицы SQL, прежде чем заполнять его данными из excel.

Поскольку это всего лишь небольшое количество данных, которые я перемещаю, я задавался вопросом, есть ли лучший способ сделать это, чем использовать BulkCopy?

Обновление: ниже относительный код и полученная ошибка: «Данное значение типа String из источника данных не может быть преобразовано в тип float указанного целевого столбца».

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

                    }
                }                 
            }

Принятый ответ

SqlBulkCopy автоматически отображает поля. Но поскольку вы добавили первичный ключ, сопоставление по умолчанию больше недействительно.

Вам нужно будет установить ColumnMapping, чтобы явным образом рассказывал вашему объекту SqlBulkCopy, как отображать поля.

Сделайте это для всех ваших полей, кроме первичного ключа (если вы используете идентификатор на ПК).

Например:

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

Популярные ответы

Создание первичного ключа предполагает, что вы применяете ограничение домена (это хорошо).

Поэтому ваша фактическая проблема заключается не в том, что вам нужен другой способ выполнения массовой вставки, но вам нужно выяснить, почему у вас есть дубликаты ключей (точная причина для обеспечения ПК).



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему