Можно ли автоматически обновлять представление данных при обновлении базы данных, к которой оно привязано? - PullRequest
2 голосов
/ 23 сентября 2010

У меня есть приложение winforms на C #, которое имеет одно представление таблицы данных для отображения содержимого таблицы в базе данных mySQL.Возможно ли, чтобы представление данных отражало изменения в базе данных в режиме реального времени?т.е. когда я внесу изменения в таблицу напрямую, это покажет это изменение в сетке данных

Ответы [ 5 ]

0 голосов
/ 12 октября 2010
0 голосов
/ 23 сентября 2010

Вы не можете сделать это простым способом.Однако есть класс SqlDependency (ссылка) , который вы можете использовать, но не с mySQL.Если кому-то интересно, (здесь) - это еще одна ссылка на документацию по SQL Server.

В любом случае, вам действительно следует подумать, нужна ли эта функция из-за огромного влияния на эффективность БД и сетевой трафик.

0 голосов
/ 23 сентября 2010

Короткий ответ - нет.Вам нужно будет реализовать какой-то механизм опроса.

Если эта функция имеет большое значение для вашего приложения, SQL Server 2008 R2 имеет технологию под названием StreamInsight , которая позволяет на уровне базы данных наблюдать поток данных (перед нимдаже ударил диск) и инициировать события, и теоретически можно использовать механизм, который запускает обновления в вашем приложении.Я вполне уверен, что MySQL не содержит сопоставимой технологии, хотя.

Это также будет только "почти в реальном времени".Я предполагаю, что вы имеете в виду, что вы хотите, чтобы сетка данных обновлялась всякий раз, когда появляются новые данные, а не в реальном времени.

0 голосов
/ 23 сентября 2010

Теоретически это возможно, но очень неудобно и не очень похоже на работу с базами данных.Вообще говоря, БД являются источником данных в реальном времени.Если вам нужны данные в реальном времени, вам следует работать с источником push-данных в режиме реального времени (их существует целая куча, в основном ориентированная на финансовые данные).

Я внедрил систему (в SQLсервер, а не MySQL, но, возможно, вы можете сделать то же самое) с помощью триггеров обновления и собственных хранимых процедур.Собственная хранимая процедура - это просто библиотека неуправляемого кода, которая реализует определенный интерфейс и может вызываться из триггера SQL.

Последовательность событий примерно такая:

  1. Управляемый код открывает согласованный файл в файловой системе (назовем его «файлом наблюдения») с помощью FileSystemWatcher и устанавливает обратный вызов при изменении файла.
  2. Запуск триггера обновления ивызывает собственную хранимую процедуру.
  3. Собственная хранимая процедура «касается» файла наблюдения, обновляя его поле с измененными данными.
  4. FileSystemWatcher запускает обратный вызов, после которого мы знаем, что данные были измененыпоэтому мы перезагружаем его из базы данных.
0 голосов
/ 23 сентября 2010

Возможно, да, в настоящее время желательно, вероятно, нет. Технология, которую вы ищете, называется « комета » и представляет собой архитектуру типа «сервер-push». В веб-приложении это противоречит тому, что в настоящее время поддерживается, надежно и легко обслуживаемо. Варианты включают в себя запуск веб-сервера из браузера и выполнение обратных вызовов и постоянных разговоров xmpp, но ни один из них не является действительно привлекательным, если только вы не нуждаетесь в этом сейчас.

HTML 5 поставляется с веб-сокетами , которые должны сделать это желаемое поведение более доступным, но, вероятно, пройдет несколько лет, прежде чем появится широкая поддержка.

Рассмотрите возможность опроса веб-службы с использованием ajax и выборочного частичного обновления страницы, а не реализации истинной http-архитектуры push.

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