Я подозреваю, что dtExternal
имеет тип short
для emp_num
, тогда как dtEmployed
имеет какой-то другой тип (int
, long
или, может быть, просто ushort
) - или, может быть, наоборот. CopyToDataTable
просто использует типы из первой таблицы, содержащей первую строку, которую он видит, и затем возникают проблемы, когда он сталкивается со значением для столбца с таким же именем из другой таблицы. С Документы :
Схема таблицы назначения основана на схеме первой строки DataRow в исходной последовательности. Метаданные таблицы извлекаются из метаданных DataRow, а значения таблиц - из значений столбцов DataRow.
В основном: убедитесь, что две исходные таблицы имеют одинаковую схему.
РЕДАКТИРОВАТЬ: Мы не знаем, как выглядят ваши методы для заполнения двух оригинальных DataTable
- но вы можете обнаружить это, создав сначала DataTable
, явно указав тип emp_num
и тогда заполнение стола, все будет хорошо.
Вы могли бы даже оставить свои оригинальные методы в покое, и построить новую DataTable
с правильной схемой, затем вызвать
dtInstTotal.CopyToDataTable(tableWithCorrectSchema, LoadOption.PreserveChanges);