0 / 0 / 5
Регистрация: 09.10.2015
Сообщений: 229

SQLite отслеживать изменения в базе данных

15.11.2017, 07:05. Показов 6696. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую. Опишу суть, необходимо отследить вносимые изменения в базу данных из разных программ то есть изменения вносит одно приложение а следит за ним другое. Если бы всё в одном приложении то в классе SQLiteConnction есть событие Update но оно работает только с текущем подключением. Сейчас это работает так FileSystemWatcher отслеживает изменение файла а другой метод уже бегает по таблицам и смотрит что там не так, пока таблиц не много это прокатит а вот дальше сомневаюсь. Возможно есть какой то класс в библиотеке System.Data.SQLite который может это делать или есть более правильный способ отследить изменения в базе может запрос который будет выдавать имя таблицы в которой произошло последнее изменение? Спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.11.2017, 07:05
Ответы с готовыми решениями:

SQLite: в Dataset изменения есть, а в самой базе не сохраняются
имеется вот такой код : SQLiteFactory factory = (SQLiteFactory)DbProviderFactories.GetFactory("System.Data.SQLite"); ...

C# + SQLite. Как организовать UNION баз разных данных (не таблиц в одной базе данных)
Работая с SQLite Studio я заметил, что если законектить 2е разные базы данных с одинаковой структурой(столбцы и их название) затем в...

Qt и SQLite. Поиск в базе данных
Привет всем!!!Пишу программку.Работаю с SQite.Надкнулся на проблемку.Осуществляю поиск имен из базы данных.Я в лайнэдите пишу первые буквы...

15
Эксперт .NET
 Аватар для Usaga
14059 / 9268 / 1346
Регистрация: 21.01.2016
Сообщений: 34,776
15.11.2017, 07:15
Graf1385, из поставленного вопроса не ясно КОГДА нужно обнаруживать изменения. Если в момент их внесения, то таких средств нет. Если при обращении к записи, то можно завести в таблице поле типа Timestamp. Это поле будет обновляться автоматически самой СУБД каждый раз при обновлении записи.
1
0 / 0 / 5
Регистрация: 09.10.2015
Сообщений: 229
15.11.2017, 07:20  [ТС]
Именно при внесении изменений. Но Timestamp тоже полезно можно будет быстрее проверить в какой таблице произошло последнее изменение.
0
Эксперт .NET
 Аватар для Usaga
14059 / 9268 / 1346
Регистрация: 21.01.2016
Сообщений: 34,776
15.11.2017, 07:42
Graf1385, сдаётся мне, что у вас не очень правильная архитектура системы, раз такие вещи понадобились. Может распишете зачем это? Это не прямо по теме, но может быть решим вашу проблему "этажом ниже".
1
0 / 0 / 5
Регистрация: 09.10.2015
Сообщений: 229
15.11.2017, 08:08  [ТС]
Почему нет. Первое приложение назовём его "Сервер" собирает данные из бинарного файла и помещает их в базу данных каждая запись в бинарном виде может весить до 2кб. Приложение два "Клиент" должно вывести последнею запись на экран. Клиентов может быть несколько и они будут находиться удалённо но приделах локальной сети. Я рассматривал вариант с WCF то есть сервер делает запись и оповещает клиентов о том что запись сделана и можно обращаться к базе но так и не понял как это реализовать. Вариант с MSSQL тоже рассматривал но сложность в установке и настройки меня остановила да и ограничения по размеру БД. Вот я и остановился на SQLite хоть он и не предназначен для работы удалённо всё решает подключённый сетевой диск к папке с базой данных на машине с клиентом.

Добавлено через 3 минуты
Да и запись в базу данных происходит раз в секунду или даже чаще.
0
Эксперт .NET
 Аватар для Usaga
14059 / 9268 / 1346
Регистрация: 21.01.2016
Сообщений: 34,776
15.11.2017, 08:15
Цитата Сообщение от Graf1385 Посмотреть сообщение
Вот я и остановился на SQLite хоть он и не предназначен для работы удалённо всё решает подключённый сетевой диск к папке с базой данных на машине с клиентом.
Вот это ну очень хреновый вариант. На базе WCF можно сделать полудуплексное соединение, когда сервер сам посылает извещения подключенным клиентам.

Так же, вы можете поставить MSSQL\MySQL\PostgreSQL и все клиенты могут ломиться к нему. Не знаю, какие у вас могли возникнуть сложности в этом.

Но выставлять файл базы данных клиентам точно не стоит.

Добавлено через 1 минуту
Цитата Сообщение от Usaga Посмотреть сообщение
Так же, вы можете поставить MSSQL\MySQL\PostgreSQL
Последние два абсолютно бесплатны и не имеют ограничений. И настраиваются просто.
1
0 / 0 / 5
Регистрация: 09.10.2015
Сообщений: 229
15.11.2017, 08:54  [ТС]
MySQL\PostgreSQL мне тоже не подходят меня попросили чтобы программу не было необходимости устанавливать так как дядя Вася который будет пользоваться приложением при словах Установить программу может потерять сознания, а таких дядей там много и я один устану им всем устанавливать настраивать и исправлять. А как вариант если я уберу доступ к базе для клиентов напишу nt службу которая будет мостом между клиентам и бд?
0
Эксперт .NET
 Аватар для Usaga
14059 / 9268 / 1346
Регистрация: 21.01.2016
Сообщений: 34,776
15.11.2017, 09:09
Лучший ответ Сообщение было отмечено Graf1385 как решение

Решение

Graf1385, если нужно централизованное хранение данных, то тут либо общая СУБД, либо общий сервис. Раз СУБД ставить и настраивать клиенту впадлу, то можно обойтись сервером (который уже в SQLite всё может хранить, тут пофигу).

Цитата Сообщение от Graf1385 Посмотреть сообщение
А как вариант если я уберу доступ к базе для клиентов напишу nt службу которая будет мостом между клиентам и бд?
Да, корректное решение. Центральный сервер с вашим сервисом, клиенты все дружно к нему ломятся. Способ хранения данных на сервере сразу же становится закрытой от всех деталью его реализации.

Добавлено через 1 минуту
Способов удалённого взаимодействия с сервером - масса. Хотите WCF, хотите WebAPI, хотите голые сокеты. Тут у вас руки развязаны.
1
0 / 0 / 5
Регистрация: 09.10.2015
Сообщений: 229
15.11.2017, 09:20  [ТС]
Я давно думал по поводу такой реализации меня остановило то что машины у них есть ещё с мезозойской эры с одним ядром вот как на него MSSQL устанавливать, конкуренты решили этот вопрос проще закупили компы с более или менее адекватными характеристиками и установили на них MSSQL настроили и поставили как коробку включил нажал старт и всё проблема решена. Ладно начну разбираться с полудуплексным соединением.
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,218
16.11.2017, 02:00
Цитата Сообщение от Graf1385 Посмотреть сообщение
MSSQL
сетевая СУБД со всеми вытекающими плюсами, обращаться к нему можно хоть со счет, хоть с калькулятора, если производительности
Цитата Сообщение от Graf1385 Посмотреть сообщение
машин с мезозойской эры
хватает,то все хорошо, если нет, можно попробовать перенести чуть больше нагрузки на сиквел...
а вообще, это хреновая контора, которая жмет бабки на основные средства...

Не по теме:

З.Ы. беги оттуда

0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
16.11.2017, 10:34
Цитата Сообщение от Graf1385 Посмотреть сообщение
рассматривал вариант с WCF то есть сервер делает запись и оповещает клиентов о том что запись сделана и можно обращаться к базе но так и не понял как это реализовать.
Самый умный вариант.
Коннектитесь к службе и подписываетесь на событие изменения данных в БД (например, на внесение новой записи).
Потом все, ждете. Как кто-то из подключенных клиентов изменил что-то в БД-получаете оповещение, запрашиваете данные из БД и обновляете отображение.
1
0 / 0 / 5
Регистрация: 09.10.2015
Сообщений: 229
16.11.2017, 12:55  [ТС]
Ну
Цитата Сообщение от insite2012 Посмотреть сообщение
Потом все, ждете. Как кто-то из подключенных клиентов изменил что-то в БД-получаете оповещение, запрашиваете данные из БД и обновляете отображение.
Ну да про это и речь так и будет тем более что у класса SQLiteConnection есть это событие. Интересно то что как я понимаю MSSQL работает тоже примерно также на службе. Короче изобретаю велосипед по новой.

Добавлено через 3 минуты
Тут вопросик правда не по теме, а службу можно запустить с аргументами как программу. Типа передать путь к базе при запуске.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
16.11.2017, 13:07
Цитата Сообщение от Graf1385 Посмотреть сообщение
у класса SQLiteConnection есть это событие.
Не нужно вам это событие. Вся работа с БД-только через службу.
Цитата Сообщение от Graf1385 Посмотреть сообщение
службу можно запустить с аргументами как программу.
Почему же нет. Хостите службу в консоли и запускаете с аргументами. Или в конфиге прописываете путь к БД.
0
0 / 0 / 5
Регистрация: 09.10.2015
Сообщений: 229
16.11.2017, 13:11  [ТС]
Да если бы нужно несколько параметров передать можно в файл а для одного пути создавать файл мне кажется странно можно передать путь а остальное хранить в самой базе так будет правильней мне так думаю.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
16.11.2017, 13:13
Цитата Сообщение от Graf1385 Посмотреть сообщение
для одного пути создавать файл мне кажется странно
Дело не в странности, а в удобстве.
Куда как удобнее модифицировать конфиг в текстовом редакторе, чем запускать с аргументами.
0
0 / 0 / 5
Регистрация: 09.10.2015
Сообщений: 229
16.11.2017, 13:14  [ТС]
Это да.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.11.2017, 13:14
Помогаю со студенческими работами здесь

Поиск в базе данных SQLite
Здравствуйте! Подскажите пожалуйста. Создаю программу для рассылки почты по заказчикам. Интересует как вытаскивать данные напрямую из базы...

Запросы к базе данных sqlite
Есть запрос QSqlQuery my_query("SELECT date_time " "FROM senosrs_reading " "WHERE...

Поиск по базе данных Sqlite
Здравствуйте, возникла следующая проблема - не могу реализовать поиск по базе данных, чтобы в lineEdit вводить значения и последующее...

FDConnection + sqlite + путь к базе данных
Как програмно указать путь к базе данных? База находится рядом с программой

IIS8. Нет доступа с базе данных SQLite
Всем привет. вопрос следующий. есть сервер на котором настроен IIS8 (Server 2012 R2 x64)Есть удаленный сервер на котором лежит БД Sqlite....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

Новые блоги и статьи
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
PowerShell и онлайн сервисы. Валюта (floatrates.com руб.)
iNNOKENTIY21 11.11.2025
PowerShell функция floatrates-rub Примеры вызова: # Указанная валюта 'EUR' floatrates-rub -Code 'EUR' # Список имеющихся кодов валют floatrates-rub -Available function floatrates-rub {
PowerShell и онлайн сервисы. Погода (RP5.ru)
iNNOKENTIY21 11.11.2025
PowerShell функция Get-WeatherRP5rss для получения погоды с сервиса RP5 Примеры вызова Get-WeatherRP5rss с указанием id 5484 — Москва (восток, Измайлово) и переносом строки:. . .
PowerShell и онлайн сервисы. Погода (wttr)
iNNOKENTIY21 11.11.2025
PowerShell Функция для получения погоды с сервиса wttr Примеры вызова: Погода в городе Омск с прогнозом на день, можно изменить прогноз на более дней, для этого надо поменять запрос:. . .
PowerShell и онлайн сервисы. Валюта (ЦБР)
iNNOKENTIY21 11.11.2025
# Получение курса валют function cbr (] $Valutes = @('USD', 'EUR', 'CNY')) { $url = 'https:/ / www. cbr-xml-daily. ru/ daily_json. js' $data = Invoke-RestMethod -Uri $url $esc = 27 . . .
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений Всем привет. А вот мой компьютер, переделанный из ноутбука. Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru