Получение SqlBulkCopy для чествования имён столбцов

Я занимаюсь преобразованием некоторых процедур отчетности на основе хранимых процедур для запуска на C#. Общая идея заключается в том, чтобы использовать все чудеса C#/.NET Framework, а затем загрузить результаты обратно в БД. Все шло планомерно, за исключением одной проблемы, с которой я столкнулся вчера и решил ее сегодня.

Для импорта я программно создаю DataTable и использую SqlBulkCopy для переноса результатов на сервер. Например,

 DataTable detail = new DataTable();
 detail.Columns.Add(new DataColumn("Stock", Type.GetType("System.Decimal")));
 detail.Columns.Add(new DataColumn("Receipts", Type.GetType("System.Decimal")));
 detail.Columns.Add(new DataColumn("Orders", Type.GetType("System.Decimal")));

Таблица импорта имела поля в следующем порядке.

...
Stock decimal(18,4),
Orders decimal(18,4),
Receipts decimal(18,4)
...

По сути, значение Receipts (Поступления) шло в Orderers (Заказы), и наоборот.

Очевидно, это потому, что SqlBulkCopy, кажется, не почитает название колонки, которую я ему сказал заполнять - она просто идет по порядку.

Это проблема для меня, так как мы используем SQL Compare от Redgate. При перемещении изменений из одной базы данных в другую, порядковая позиция столбцов не обязательно поддерживается. (например, если вы вставляете новый столбец в качестве третьего порядкового поля, SQL Compare просто добавляет его в таблицу на синхронизации, делая ее последним столбцом).

Это серьезно портит мое решение. Теперь это только 'импорт' таблиц, так что при необходимости я могу бросить и воссоздать их как часть любого скрипта переноса с неповрежденными порядковыми позициями. Однако я бы предпочёл этого не делать.

Есть ли способ заставить SqlBulkCopy уважать имена столбцов, которые вы говорите ему заполнить?

20
задан Paul Alan Taylor 23 August 2011 в 15:50
поделиться