Ответ 1
Вы ищете SqlDependency
класс, который позволяет прослушивать изменения в наборе результатов SQL-запроса.
Я хочу слушать изменения данных в базе данных SQL Server с С#. Я надеялся, что будет какой-то слушатель, который я мог бы использовать, чтобы определить, являются ли данные, которые у меня есть, устаревшими. Несмотря на довольно распространенный сценарий, я не могу найти никаких решений, которые не позволяют просто опросить базу данных.
Я использую Linq-To-SQL для доступа к данным и, следовательно, имею объект DataContext, я надеялся, что смогу слушать событие с измененными данными, но я не могу найти его.
Я ценю, что это нетривиальный барьер (от С# метода до SQL Server DB), причина, по которой я ожидал, что это проблема, является общим требованием для GUI. Если вам не удалось прослушать обновления, как сохранить данные, отображаемые в графическом интерфейсе, свежими (когда он поддерживается источником данных SQL Server).
Хотя это не для работы с графическим интерфейсом, я ожидал что-то адаптировать из этой области.
Есть ли способ подписаться на события изменения базы данных SQL Server в С#?
Вы ищете SqlDependency
класс, который позволяет прослушивать изменения в наборе результатов SQL-запроса.
Я никогда не использовал их раньше, но вы пробовали уведомления о событиях SQL Server? См. Эту статью: Начало работы с уведомлениями о событиях SQL Server
DataContext не будет предлагать вам какие-либо функции прослушивателя SQL Server. Лучше всего создать приложение опроса или даже отдельный поток, который периодически проверяет базу данных для изменений и выставляет событие, которое может прослушать ваше основное приложение.
Если вы используете SQL Server 2008, есть встроенная функция Change Data Capture, которая довольно удобна.
http://msdn.microsoft.com/en-us/library/bb522489.aspx
Вы можете прочитать данные CDC.
Я бы использовал таблицу с одной строкой в db, чтобы каталогизировать последние обновленные, вставленные или удаленные события, а затем создавать триггеры в каждой таблице важности для обновления этой таблицы, а затем опросить эту таблицу для изменений.