SQLBulkCopy, используемый вместе с Transaction и запускающий событие каждый раз при копировании пакета - PullRequest
0 голосов
/ 03 февраля 2012

Я сейчас загружаю данные на сервер MS SQL через SQLBulkCopy и транзакции. Я хотел бы иметь возможность вызывать событие после каждой загрузки пакета (я уже пробовал событие SQLRowsCopied, и оно не работает, см. Цитату ниже)

MSDN цитата:

Никаких действий, таких как транзакция, не поддерживается в соединении во время выполнения операции массового копирования, и рекомендуется не использовать то же соединение, которое использовалось во время события SqlRowsCopied. Однако вы можете открыть другое соединение.

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.sqlrowscopied(v=vs.80).aspx

Так что я в принципе не могу взять свой пирог и съесть его :( Кто-нибудь знает решение по этому поводу, так как я хотел бы инициировать событие после загрузки каждой партии.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 22 марта 2012

Я наконец решил использовать внутреннюю транзакцию. ATM, кажется, работает нормально, если обнаружена ошибка, текущий пакет откатывается. Что касается комментария Бена выше, я попробовал это, но это невозможно, не то, чтобы он проходил через часть кода, где вы могли бы вызвать событие. В конце я использовал свойство notifyafter, которое вызывает событие после того, как были скопированы x строк, чтобы вызвать мое событие. Возможно, не самый лучший способ сделать это, но я не мог придумать лучший способ. Надеюсь, кто-нибудь найдет это полезным.

...