Парадокс - знать, есть ли изменения в базе данных без открытия соединения - PullRequest
0 голосов
/ 28 декабря 2011

Я пишу приложение на C #, которое должно сделать следующее:

без подключения к базе данных. Мне нужно проверить, есть ли новые базы данных в базе данных. Если есть, то мне разрешено открыть соединение и получить их.

Так что мне просто нужно знать, есть ли новые журналы (элементы) в базе данных, БЕЗ открытия соединения с ней.

Сервер может отправлять почту администратору, и я могу отслеживать изменения в почтовом ящике, но это решение неприемлемо.

Может ли сервер при вставке новых строк создать файл *.txt на диске с текстовой индикацией новых строк, которые я могу проверить и удалить / отредактировать после загрузки изменений?

(база данных находится в SQL Server 2008 R2)

Это вообще возможно? Любые / и / или другие варианты сделать это приветствуются.

Большое спасибо всем заранее.

Ответы [ 3 ]

2 голосов
/ 28 декабря 2011

Основано на следующих поясняющих комментариях ОП по данному вопросу:

Существует веб-приложение, которое проверяет изменения каждые 30 секунд и показывает последние авторизации.База данных отслеживает авторизацию сотрудников и часто обновляется.Сейчас я создаю настольное приложение, которое имеет локальное соединение с сервером и может обновляться чаще, но клиент не хочет, чтобы приложение открывало соединение каждую секунду, aldo соединение открывается на несколько мс.

Я думаю, что подходящим решением является бизнес-уровень.

Если вы создаете бизнес-уровень, размещенный в IIS, который осуществляет доступ к базе данных от имени пользователей, используя одного пользователя базы данных.для доступа (пользователь пула приложений или олицетворенный пользователь в веб-приложении), тогда пул соединений значительно сократит число соединений, выполненных с базой данных.

Вот статья MSDN , котораяподробно описывает механизм и преимущества пула соединений.

Все клиенты, включая веб-уровень, будут подключаться к бизнес-уровню с помощью WCF или .Net Remoting (в зависимости от версии .Net), ибизнес-уровень будет единственным приложением, осуществляющим доступ к базе данных.

Дополнительным преимуществом этого подхода является то, что вы можете перемещать весь доступ к базе данных (в том числе из веб-клиента) внутри DMZ, чтобы не было прямого доступа к базе данных.от DMZ наружу.Это может быть хорошим коммерческим аргументом для вашего клиента.

Мы широко используем этот механизм для очень крупных клиентов с высоким уровнем безопасности и производительности.

Обновление

В качестве альтернативы вы можете запросить бизнес-уровень к базе данных каждые 30 секунд, извлечь необходимую информацию и сохранить ее локально на бизнес-уровне вкакая-то база данных (Access, Sql Server Express и т. д.).При получении запросов от клиентов они будут обслуживаться из локального хранилища данных вместо базы данных.

Вы можете сделать это, запустив фоновый поток в событии Application_Start global.asax или добавив запись в кэш, котораяистекает каждые 30 секунд и выполняет работу в событии тайм-аута кэша.

Это уменьшит количество подключений до 1 (или 2, если сеть не изменяется) каждые 30 секунд (или в любое другое время).

0 голосов
/ 28 декабря 2011

Если клиентское настольное приложение не будет развернуто массово, вы можете использовать SqlDependency.Тогда вам не придется часто опрашивать базу данных, вместо этого база данных уведомит вас, если что-то изменится.

Вы также можете развернуть службу на сервере, который использует SqlDependency, а затем подключиться к этой службе из приложений для настольных компьютеров.

Если это не вариант этот документ упоминает некоторые другие параметры.

Эти два могут быть применены к вашей ситуации:

  • Создайте триггер AFTER UPDATE для отслеживаемой таблицы, действие которой использует SQL Server Service Broker для отправкисообщение объекту, нуждающемуся в уведомлении.
  • Используйте Windows Server App Fabric Cache, который поддерживает механизм уведомлений об изменениях, основанный на кэше объектов в памяти и функциях обратного вызова, которые вы регистрируете в объектах.
0 голосов
/ 28 декабря 2011

Попробуйте отслеживать дату изменения файлов в папке БД.

...