Уведомлять приложение C ++ о внесении изменений в таблицу SQL Server - PullRequest
4 голосов
/ 29 января 2010

Я уже писал об этом раньше, но не получил подходящего ответа, соответствующего моим требованиям. Я ищу технологию для уведомления приложения C ++, когда вносятся изменения в таблицу SQL Server. Наш средний уровень - C ++, и мы не собираемся переходить на инфраструктуру .NET, что означает, что мы не можем использовать SQLDependency или SQL Notification Server. Мы также застряли на SQL Server 2005, что также исключает внешнюю активацию SQL Service Broker (которая появилась в SQL 2008).

Чтобы дать более широкое понимание того, чего я пытаюсь достичь: наша база данных обновляется новой информацией; Когда бы ни поступала новая информация, мы хотели бы передать ее в приложение C ++, чтобы его панель мониторинга отображала самые последние данные для пользователя.

Мы знаем, что мы можем сделать это с помощью приложения C ++, опрашивающего базу данных, но я считаю это неэффективной архитектурой и хотел бы, чтобы SQL отправлял информацию или уведомление в C ++.

Ответы [ 3 ]

4 голосов
/ 29 января 2010

На самом деле вы можете использовать Query Notification из C ++. И клиенты OleDB, и клиенты ODBC для поставщиков SQLNCLI10 и SQLNCLI поддерживают уведомления о запросах. См. Работа с уведомлениями о запросах , во второй половине страницы вы найдете материал SSPROP_QP_NOTIFICATION... для наборов строк OleDB и материал SQL_SOPT_SS_QUERYNOTIFICATION... для операторов ODBC. Так что подписка на уведомления от среднего уровня C ++ абсолютно выполнима. И вторая часть головоломки заключается в том, чтобы на самом деле получать уведомления, которые являются ничем иным, как отправкой RECEIVE и ожиданием. Другими словами, вы можете свернуть свой собственный SqlDepdency на чистом C ++ поверх OleDB или ODBC. После того, как вы получили уведомление об промежуточном уровне, это просто (ну, вроде как), чтобы обновить клиентские дисплеи.

Между всеми альтернативами для обнаружения изменений данных вы не найдете ничего лучше, чем Query Notifications.

Кстати, единственное, чего вам следует избегать, это уведомлять клиентов о триггерах (о, ужас ...).

1 голос
/ 29 января 2010

Я бы предложил написать триггер SQL CLR, который использует Net Pipes для уведомления вашего приложения.

HTH

0 голосов
/ 29 января 2010

Есть еще одно предложение, и оно может быть проще, вы можете посчитать это предложение мусором из-за многословного способа сделать это, почему бы не отправить электронное письмо с уведомлением о триггере таблицы, таким как вставка / удаление / обновление на частный адрес электронной почты с темой строки «УВЕДОМЛЕНИЕ ОБ ИЗМЕНЕНИИ ДАННЫХ», ваше приложение C ++ может периодически запрашивать почту с личного адреса электронной почты через POP3 ... Ящики Mercury pop3 могут использоваться на сервере (это часть приложения xampp) просто мысль ...

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...