SqlBulkCopy из электронной таблицы

Я использую SqlBulkCopy для импорта записей из электронной таблицы в базу данных SQL Server.

Операция массового копирования отлично работает в большинстве условий. Однако он делает то, что я не могу понять.

У меня есть столбец, определенный в моих сопоставлениях столбцов:

bCopy.ColumnMappings.Add("Amount", "Amount");

В электронной таблице это varchar, как и в моей рабочей таблице (я импортирую в рабочую таблицу, чтобы выполнить некоторую проверку, прежде чем перемещать данные в мою живую таблицу).

Пока я тестировал, я вошел в запись и изменил значение с числа на слово FOO. Затем я выполнил импорт.

Моя процедура проверки правильно определяет проблему со столбцом, но это потому, что столбец имеет значение NULL, а не потому, что значение не является числом. Когда я проверил базу данных, я обнаружил, что это поле было импортировано с нулевым значением. Я думал, что значение должно было быть FOO.

Это кажется мне довольно странным.

Если это имеет значение, я использую OLEDB для доступа к электронной таблице, например к таблице базы данных, и передаю OLEDBDataReader в качестве источника в моем объекте BulkCopy.

Достаточно ли умен драйвер OLEDB, чтобы понять, что это недопустимое значение в этом столбце? Я думал, что по умолчанию все будет строкой / varchar. (Мы не вносим никаких изменений в тип данных столбца в электронной таблице)

ИЗМЕНИТЬ

Я проверил dataReader, как было предложено, и, как ни странно, когда я изменяю поле Amount на строковое значение, значение в datareader равно нулю. Я впервые вижу такое поведение в программе чтения данных Excel. Другие строковые поля работают нормально.


person Tim    schedule 10.09.2013    source источник
comment
Посмотрите, что читатель возвращается, чтобы узнать.   -  person usr    schedule 11.09.2013


Ответы (1)


Я исправил проблему, добавив IMEX = 1 в строку подключения OLEDB. Теперь значение отображается в считывателе данных. (Думаю, мне нужно сделать это для поддержки столбцов со смешанными значениями)

person Tim    schedule 11.09.2013
comment
В случае, если кто-то еще прочитает это - IMEX = 1 имеет значение, заполненное в устройстве чтения данных, но оно ВСЕ ЕЩЕ не попало в целевую таблицу. В итоге я добавил HDR = YES в строку подключения, что, наконец, устранило проблему. Не спрашивайте меня, почему, но я рад, что наконец это заработало. - person Tim; 11.09.2013