Адаптер таблицы против SqlPipe (особый случай)C#

Место общения программистов C#
Ответить
Anonymous
 Адаптер таблицы против SqlPipe (особый случай)

Сообщение Anonymous »

У меня есть SQL Server Server1 с базой данных Database1, которая не нормализована; это затрудняет использование для различных целей, таких как внешние клиенты (инструменты для визуализации, другие программы и т. д.), и не может быть изменено (по многим причинам).
Чтобы иметь возможность использовать другие клиенты эффективно, у меня есть еще один SQL Server Server2, где базы данных оптимизированы, а данные с Server1 изменяются и вставляются в Server2.
Как пример из вставки Server1.database1.dbo.TableA свои данные как в Server2.database2.dbo.TableB, так и в Server2.database2.dbo.TableC. Это можно сделать через T-SQL (триггеры, процедуры и т. д.).
Но в некоторых ситуациях удобнее разработать DLL, зарегистрировать сборку в SQL Server и запустить триггер при ОБНОВЛЕНИИ.
Я попытался разработать DLL и зарегистрировать сборку на Сервере2, которая будет запускаться при ОБНОВЛЕНИИ на Сервере2 для Table_ActNow.
Я разработал класс, используя C# и .NET 4.8. Логика моего класса заключалась в использовании адаптеров таблиц, которые будут загружать данные из Server1.TableA с помощью команды SQL, например SELECT TOP(1) * FROM TableA, в набор данных через Fill()< /code>, обработать загруженные данные, заполнить два других набора данных обработанными данными и использовать эти два объекта для вставки в Server2.TableB и Server2.TableC через адаптер таблицы каждого набора данных, используя INSERT.
Проблема в том, что мой класс запускается SQL Server, координатором распределенных транзакций Microsoft (MSDTC), который управляет транзакциями и соединениями и в этом случае сообщает об ошибках (DTC настроен правильно на обоих серверах и работает правильно).
После нескольких дней отладки я обнаружил, что методы SQL-команд адаптера таблицы не отображаются, в результате транзакция завершится неудачно.
Единственный обходной путь что может сработать, так это добавить в частичный класс методов адаптера таблицы, которые будут дополнительно предоставлять методы команд SQL (я это не проверял!)
Согласно документации Microsoft, адаптеры таблиц должны быть используется в CRUD-приложениях.
Также в документации Microsoft по транзакциям приводятся примеры использования SqlPipe, в этом случае мне приходится управлять открытием и закрытием соединений и проверять, SqlCommand выполняет задание во время транзакция.
Поскольку я заметил, что при использовании адаптеров таблиц для заполнения набора данных, а затем что-то с этими данными, этот процесс происходит намного быстрее и эффективнее по сравнению с другим случаем, когда мне приходится управлять соединение, создаю переменные и готовлю другие шаги для работы с данными, как это происходит при использовании SqlPipe.
С точки зрения опытного человека я хотелось бы знать, каков элегантный и оптимизированный способ сделать это (в .NET)?
Использовать дополнительные адаптеры таблиц неправильно или это слишком сложно?
Должен ли я использовать SqlPipe?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ecial-case
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»