Я использую SqlBulkCopy для импорта записей из электронной таблицы в базу данных SQL Server.
Операция массовой копии работает в большинстве случаев. Однако это то, что я не могу опустить.
У меня есть столбец, определенный в моих сопоставлениях столбцов:
bCopy.ColumnMappings.Add("Amount", "Amount");
В электронной таблице это varchar, как и в моей рабочей таблице (я импортирую в рабочую таблицу, чтобы выполнить некоторую проверку, прежде чем переместить данные в свою таблицу).
Пока я тестировал, я вошел в запись и изменил значение от числа до слова FOO. Затем я запустил свой импорт.
Моя процедура проверки правильности идентифицирует проблему с столбцом - но это потому, что столбец имеет значение null, а не потому, что значение не является числом. Когда я проверил базу данных, я обнаружил, что это поле было импортировано с нулевым значением. Я думал, что ценность должна быть FOO.
Мне это кажется странным.
Если это имеет значение, я использую OLEDB для доступа к электронной таблице, как таблица базы данных, и передачи OLEDBDataReader в качестве источника в моем объекте BulkCopy.
Является ли драйвер OLEDB достаточно умным, чтобы понять, что это не допустимое значение в этом столбце? Я думал, что по умолчанию будет строка / varchar. (Мы не вносим никаких изменений в тип данных столбца в электронной таблице)
РЕДАКТИРОВАТЬ
Я проверил dataReader, как было предложено, - и довольно странно, когда я изменяю поле Amount, чтобы иметь строковое значение, значение в datareader равно null. Это первый раз, когда я видел подобное поведение в datareader Excel. Другие строковые поля работают отлично.
Я исправил проблему, добавив IMEX = 1 в мою строку OLEDB Connection. Теперь значение отображается в datareader. (Думаю, мне нужно сделать это для поддержки столбцов со смешанными значениями)