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