@ У Miky D был правильный подход, но я хотел бы расширить детали. Реализация IDataReader не так уж сложна.
Чтобы заставить IDataReader работать с массовым инсертером, вам нужно взглянуть на реализацию:
- Dispose ();
- FieldCount {
- объект GetValue (int i);
- GetSchemaTable ();
- Read ();
Остальные могут быть заглушками, которые генерируют NotImplementedExceptions, см. Этот пример
Получение таблицы схемы также довольно просто . Просто выберите одну строку из целевой таблицы и вызовите GetSchemaTable ().
Для ясности вещей мне нравится иметь абстрактный класс, который генерирует исключение NotImplementedException в несущественных методах, возможно, ниже по тексту, что абстрактный класс может реализовывать недостающие биты для дополнительной надежности.
Пара БОЛЬШИХ предостережений при таком подходе:
- Какие методы для реализации не документированы в SQLBulkCopy
- С учетом этого в более поздних версиях фреймворка / исправлений или пакета обновлений вы можете сломаться. Поэтому, если бы у меня был критически важный код, я бы взял кусочек и реализовал весь интерфейс.
Я думаю, что очень плохо, что SQLBulkCopy не имеет дополнительного минимального интерфейса для массовой вставки данных, IDataReader - это просто жир.