Здравствуйте,
можно ли в программе, написанной в Visual Studio 6, отследить изменения (получить извещение), сделанные в определенной таблице базы на MS SQL ?
База доступна для необходимых добавлений.
Заранее спасибо.
potap пишет:
> можно ли в программе, написанной в Visual Studio 6, отследить изменения > (получить извещение), сделанные в определенной таблице базы на MS SQL ?
Если коротко — то нет. Если поподробнее — очень сложно.
а тригеры здесь никак не помогут? нет программного интерфейса к ним извне?
мне нужно отследить добавление/удаление строк из таблицы
Здравствуйте, MasterZiv, Вы писали:
MZ>potap пишет:
>> можно ли в программе, написанной в Visual Studio 6, отследить изменения >> (получить извещение), сделанные в определенной таблице базы на MS SQL ?
MZ>Если коротко — то нет. Если поподробнее — очень сложно.
Re[3]: Отследить изменение
От:
Аноним
Дата:
25.04.08 19:21
Оценка:
Здравствуйте, potap, Вы писали:
P> а тригеры здесь никак не помогут? нет программного интерфейса к ним извне? P>мне нужно отследить добавление/удаление строк из таблицы
Начните отсюда. Только прочитайте топик внимательно.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, potap, Вы писали:
P>> а тригеры здесь никак не помогут? нет программного интерфейса к ним извне? P>>мне нужно отследить добавление/удаление строк из таблицы
А>Начните отсюда. Только прочитайте топик внимательно.
А>http://www.sql.ru/forum/actualthread.aspx?bid=1&tid=330799&pg=1
potap пишет:
> Спасибо, очень интересно, буду читать
Главное, почему НЕ НАДО так делать (так — это любым способом оповещать
клиентов об изменениях в БД) -- большое количество клиентов.
Если мы производим в единицу времени M транзакций изменения данных,
и имеем N клиентов, то в эту же единицу времени нам надо будет производить
o = N * M оповещений.
M на самом деле обычно тоже зависит от N, количества пользователей,
поскольку пользователи на сервере появляются не просто так, а чтобы что-то
делать. Допустим,
M = k * N (кол-во операций линейно зависит от кол-ва пользователей).
В таком случае оценка кол-ва оповещений будет
o = k * N**2
т.е. кол-во работы сервера по оповещению клиентов будет пропорционально
квадрату кол-ва клиентов. Это — очень плохо для масштабируемости системы.
Т.е. грубо говоря, для больших систем с высокой нагрузкой это просто
не будет работать.
Что касается конкретно предлагаемого решения — с KILL —
тут есть два недостатка
* kill внутри сервера не работает синхронно. Т.е. будет какая-то задержка.
(но это не сильно важно)
* при большой нагрузке клиенты тупо не успеют устанавливать соединения с
сервером, поскольку установка соединения — достаточно длительная операция.
Но, конечно, при вялом изменнеии данных схема работать будет.
Здравствуйте, potap, Вы писали:
P>Здравствуйте, P>можно ли в программе, написанной в Visual Studio 6, отследить изменения (получить извещение), сделанные в определенной таблице базы на MS SQL ? P>База доступна для необходимых добавлений. P>Заранее спасибо.
Здравствуйте, potap, Вы писали:
P>Здравствуйте, P>можно ли в программе, написанной в Visual Studio 6, отследить изменения (получить извещение), сделанные в определенной таблице базы на MS SQL ? P>База доступна для необходимых добавлений. P>Заранее спасибо.
Ещё можно держать соединение из всех клиентов, крутиться там в цикле (while + delay), проверять условие и, когда надо, посылать сообщение через raiserror с кодом меньше 10. Из SqlConnection придёт отличный event. Я так делал, работает, начиная с MSSQL2000.
Но, если клиентов больше сотни, то надо искать другой подход. Тот же сервис-брокер, например, хотя, это уже MSSQL2005.