|
28 / 20 / 10
Регистрация: 01.12.2018
Сообщений: 186
|
|
Небольшая проблема с SQLite29.11.2021, 18:22. Показов 6730. Ответов 67
Метки нет (Все метки)
Здравствуйте. Начну сначала. Есть приложение на Windows Form, которое работает напрямую с этой БД. В самом начале класса главной формы объявлена переменная типа SQLiteConnection, но объект не создан(!). Далее, при загрузке формы создается уже объект и проверяется, есть ли файл базы данных, если нет, создаем его и с помощью CREATE TABLE создаем нужные, а точнее одну таблицу. По всему коду работа с БД выстроена по типу "создал объект-открыл подключение-сделал дела-закрыл подключение", то есть как-то глобально я не открываю подключение. В общем встал вопрос об архивации и восстановлении данных(в учебном процессе, пишу выпускную работу по курсам программиста, не путать с ВУЗом и высшим образованием). С архивацией я разобрался более менее, я просто временно копирую все нужные мне каталоги и файлы, архивирую их и после удаляю те самые временные файлы. Вот с восстановлением из архива все сложнее и в этом и заключается мой вопрос, что при попытке заменить исходный файл БД, ловиться исключение, что файл БД уже используется процессом. Так вот, как мне, хотя бы временно прикрыть использование файла, дабы его заменить из восстанавливаемого архива. Или может я вообще неправильно делаю. Код пока что приводить не будут, так как весь его читать долго будет, да и сделано там по "ребячески", ибо еще учусь. В процессе обсудить какие-либо куски кода не проблема, если появятся дополнительные вопросы. Спасибо!
0
|
|
| 29.11.2021, 18:22 | |
|
Ответы с готовыми решениями:
67
Есть небольшая проблема. После добавления слов в коллекцию не переводит. Как исправить ошибку?
|
|
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
|
|
| 29.11.2021, 19:26 | |
|
fakemade, ошибка может возникать в случаях:
1. Если база данных сейчас используется. То есть нужно сначала закрыть Connection к базе данных (полностью отключится от нее), а потом удалить сам файл. 2. Если база данных размещается там, куда пользователь (от имени которого запущена прога) не имеет доступа. Решение: или разместить прогу туда, куда есть доступ у простого пользователя, или же запускай саму апликуху(и вижуалку) от имени администратора.
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 29.11.2021, 19:30 | |
|
У меня простой вопрос: зачем Вы все это делаете: создаете БД, прячете ее в архив, потом удаляете, постом поднимаете из архива и т.д. ? Все это - прерогатива админа БД и для этого есть специальные "штатные" приложения. Вы хотите написать собственный Клиент DB ?
0
|
|
|
28 / 20 / 10
Регистрация: 01.12.2018
Сообщений: 186
|
|
| 30.11.2021, 06:17 [ТС] | |
|
Igr_ok,
1) Для этого я специально указал, что везде, где обращаюсь к БД я сначала открываю соединение, после закрываю. Я прочел весь код и везде, где я работаю с бд соединений закрывается, нигде не остается открытым. 2)Я попробую это сделать, если сработает, будет хорошо. MsGuns, данная процедура нужна для архивации данных и их последующего переноса, то есть не постоянно, а по запросу пользователя. Все делается в рамках учебной работы и "штатные" приложения меня не интересуют, да и специфику такого приложения не представляю, максимум WinRar, которым я могу сделать это. И почему это прерогатива админа БД, если я использую простейшую локальную SQLite3, а архивировать мне нужно не только db, но и файлы, которые лежат рядом с ним. Это приложения каталогизатора книг, который делает локальную библиотеку из имеющихся на ПК книг(с помощью пользователя конечно же), все данные обо всех экземплярах хранятся в БД (в то числе и путь до файла), а сами экземпляры лежат рядом в папках, чтобы я прямо из программы мог запускать нужный мне файл.
0
|
|
|
14127 / 9347 / 1350
Регистрация: 21.01.2016
Сообщений: 35,125
|
|
| 30.11.2021, 06:26 | |
|
0
|
|
|
28 / 20 / 10
Регистрация: 01.12.2018
Сообщений: 186
|
|
| 30.11.2021, 06:57 [ТС] | |
|
Usaga, ну если вы имеете ввиду конструкторы, то да, где надо создаю объект и строку подключения, подключаюсь, делаю дела, отключаюсь. Повторюсь, делается все в рамках учебного проекта, и сейчас необходимо довести до состояния "работает", а не до состояния "красиво, оптимально, приложение ААА класса, которое умеет все на свете и весит 1 килобайт", если вы понимаете о чем я и извините за шутку, если чем то обидел
. Пока что нужно решить проблему с архивированием данных программы, а использование другим процессом не позволяет мне архивировать файл самой БД(это я решил путем копирования файлов и их последующего архивирования), а вот обратный процесс не получается(мне нужно по сути удалить папку ресурсов программы, чтобы ее же восстановить из копии). Спасибо!
0
|
|
|
14127 / 9347 / 1350
Регистрация: 21.01.2016
Сообщений: 35,125
|
|||
| 30.11.2021, 07:05 | |||
|
0
|
|||
|
28 / 20 / 10
Регистрация: 01.12.2018
Сообщений: 186
|
|||
| 30.11.2021, 07:19 [ТС] | |||
|
0
|
|||
|
14127 / 9347 / 1350
Регистрация: 21.01.2016
Сообщений: 35,125
|
|||||||||
| 30.11.2021, 07:28 | |||||||||
|
Пример:
0
|
|||||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|||
| 30.11.2021, 13:29 | |||
|
fakemade, Стесняюсь спросить, а зачем восстановление из архива БД выполняется из приложения ? Почему нельзя "штатными" средствами (WinRar) при закрытом приложении ?
Ну и все, что сказано Usaga, - всю работу с БД следует вынести (инкапсулировать) с один класс (Repository), тогда поиск ошибки сильно упростится, да и основной код сократится и будет проще читаться. А суть ошибки скорее всего в том, что при восстановлении файл БД шарится (т.е. есть открытое соединение с БД). Но если уж так приспичило, то перед началом восстановления следует проверять нет ли открытого соединения с базой. В целом же Ваша идея архивации - восстановления базы из приложения нехорошая. Поверьте - есть немалый опыт, чтобы это утверждать. Добавлено через 5 минут И главное, Ваше приложение явно рассчитано на одного пользователя, тогда зачем все эти открытия-закрытия соединения ? Это все равно, что при поездке в метро выходить из него на каждой станции на улицу и снова заходить, покупая новый билет, - ну ведь глупо же ![]() Добавлено через 3 минуты ![]() Добавлено через 1 минуту
0
|
|||
|
28 / 20 / 10
Регистрация: 01.12.2018
Сообщений: 186
|
|||||
| 30.11.2021, 17:49 [ТС] | |||||
|
0
|
|||||
|
|
|||||||
| 30.11.2021, 18:00 | |||||||
0
|
|||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 30.11.2021, 19:07 | ||
|
Если да и в момент запуска Вашего приложения Клиент активен и там открыта Ваша база, то эффект будет тот же - восстановления базы из архива не произойдет, т.к. она (база) юзается (шарится) этим Клиентом. Закройте Клиент или разорвите соединение с базой в нем и повторите попытку разархивации базы из приложения. Но, повторюсь еще раз, это - плохая манера. Andrey-MSK, Ну и примерчик Вы ему выложили Дай Бог ему разобраться хотя бы с основами, а тут...
0
|
||
|
28 / 20 / 10
Регистрация: 01.12.2018
Сообщений: 186
|
|||||||
| 30.11.2021, 19:22 [ТС] | |||||||
Еще вопрос, может оффтоп, но не могли бы вы посоветовать книгу по С#. По С читал Дейтлов, там очень удобная подача материала + задачи в конце каждой главы и хотелось бы аналогичную по С#, чтобы с задачками. Только благодаря совместному труду и чтению Дейтелов я смог понять С и сложные там темы, по типу указателей и т.д., хотелось бы также и с С# разобраться. Спасибо.
0
|
|||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 30.11.2021, 20:32 | |
|
fakemade, Хейлсберг однозначно. Но материал нужно кушать с практикой (VS подходит идеально), тогда заходит отлично.
Добавлено через 1 минуту Мне лично очень здорово помог опыт Delphi, по крайней мере азы ООП я уже знал твердо
0
|
|
|
|
|||||||||||||||||||||
| 01.12.2021, 09:01 | |||||||||||||||||||||
|
MsGuns, Дык это, там всё как в книжке, ниче сложного нет
![]() Ну если только async/await и Task убрать то будет прям как в учебнике ![]() Добавлено через 10 минут fakemade, Чтоб было понятнее что откуда берётся, покажу BaseDA и IDataAccessAsync. И всю работу с БД нужно производить асинхронными методами, чтоб приложение не замирало на время обработки запроса и получения данных.
Как-то примерно так:
И еще к нему можно прикрутить Dispose, что бы уже точно всё уничтожилось ![]() Добавлено через 22 минуты И в вызывающей сборке создавать объект доступа вот так, с проверкой на null, чтоб объект был один, либо этот класс можно оформить под паттерн Одиночка
0
|
|||||||||||||||||||||
|
28 / 20 / 10
Регистрация: 01.12.2018
Сообщений: 186
|
|
| 01.12.2021, 10:27 [ТС] | |
|
MsGuns, ну хейлберга я полистал в электронном варианте. Нашёл в бумажном, могу заказать, крайняя книга 2012 года, насколько она актуальна под современные реалии языка? Ну и соответственно как таковых задач там нет, тогда вопрос о практике остаётся открытым все равно, где же взять эту практику? И книжка Хейлберга самая популярная и доступная в плане подачи знаний? Или есть ещё лучше?
Andrey-MSK, я конечно послал в закладки, но пока что для меня это ещё ничего не значит пока. Изучу основы, после смогу посмотреть на это с другой стороны) Всё равно спасибо!
0
|
|
|
|
|
| 01.12.2021, 10:31 | |
|
0
|
|
|
28 / 20 / 10
Регистрация: 01.12.2018
Сообщений: 186
|
|
| 01.12.2021, 10:36 [ТС] | |
|
Andrey-MSK, я больше склоняюсь к литературе, тем более бумажной, чтобы было проще, тяжело читать электронные книги, не то, что сайты. Я понимаю, загуглить какой-то конкретный вопрос, это можно, а вот так изучать основы, не хотелось бы, поэтому и спрашиваю про книгу.
0
|
|
|
|
|
| 01.12.2021, 10:47 | |
|
fakemade, я вот с такой начинал, это последняя версия этой книги
Язык программирования C# 7 и платформы .NET и .NET Core | Джепикс Филипп, Троелсен Эндрю
0
|
|
| 01.12.2021, 10:47 | |
|
Помогаю со студенческими работами здесь
20
Небольшая проблема с классами Небольшая проблема в проектировании БД Небольшая проблема с кодом Cportlib небольшая проблема
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK сделайте это, JDK, то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи
и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
|