|
28 / 20 / 10
Регистрация: 01.12.2018
Сообщений: 186
|
|
Небольшая проблема с SQLite29.11.2021, 18:22. Показов 7278. Ответов 67
Метки нет (Все метки)
Здравствуйте. Начну сначала. Есть приложение на Windows Form, которое работает напрямую с этой БД. В самом начале класса главной формы объявлена переменная типа SQLiteConnection, но объект не создан(!). Далее, при загрузке формы создается уже объект и проверяется, есть ли файл базы данных, если нет, создаем его и с помощью CREATE TABLE создаем нужные, а точнее одну таблицу. По всему коду работа с БД выстроена по типу "создал объект-открыл подключение-сделал дела-закрыл подключение", то есть как-то глобально я не открываю подключение. В общем встал вопрос об архивации и восстановлении данных(в учебном процессе, пишу выпускную работу по курсам программиста, не путать с ВУЗом и высшим образованием). С архивацией я разобрался более менее, я просто временно копирую все нужные мне каталоги и файлы, архивирую их и после удаляю те самые временные файлы. Вот с восстановлением из архива все сложнее и в этом и заключается мой вопрос, что при попытке заменить исходный файл БД, ловиться исключение, что файл БД уже используется процессом. Так вот, как мне, хотя бы временно прикрыть использование файла, дабы его заменить из восстанавливаемого архива. Или может я вообще неправильно делаю. Код пока что приводить не будут, так как весь его читать долго будет, да и сделано там по "ребячески", ибо еще учусь. В процессе обсудить какие-либо куски кода не проблема, если появятся дополнительные вопросы. Спасибо!
0
|
|
| 29.11.2021, 18:22 | |
|
Ответы с готовыми решениями:
67
Есть небольшая проблема. После добавления слов в коллекцию не переводит. Как исправить ошибку?
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 01.12.2021, 15:16 | ||
Областей море, начиная от бухгалтерско-экономической и заканчивая играми и искусственным интеллектом ![]() Язык это только инструмент, а все остальное-предметная область. Со своей спецификой. Но есть общие вещи: понятие об интерфейсах, теория СУБД и т.д. У Вас, насколько я понял, задача простая. Вот и начните с "простого" : проектирование СУБД, построение моделей и их "обслуживание" (Контекст, репозиторий). Метанит вполне сойдет для начала. Ну и практика, конечно,как можно больше практики. По-поводу советов уважаемого Andrey-MSK, его код я бы не брал в качестве учебного материала - он явно не для начинающих. И дело не только в асинхронах (кстати, для десктопных приложений асинхроны не всегда хороши, даже наоборот), там много лишнего, "грузящего" код ненужными деталями. Ну и Excel Вам, думаю, ни к чему. Но это, конечно, все ИМХО ![]() Добавлено через 4 минуты При выборе Entity framework (ибо его суют повсюду, в том числе на том же метаните) не составьте себе за труд ознакомится с постами Usaga в этой конференции,- в них очень много полезных и мудрых мыслей, которые позволят изначально не пойти не по "той дороге" ![]() Добавлено через 11 минут И последнее, если я Вам еще не надоел ![]() Вы не с того начинаете, уважаемый У Вас, судя по "работе с Sqlite напрямую", каша в голове, и, как следствие, костыли в Вашей базе. Научитесь сначала работать с БД, включая ее правильное, "по теории", проектирование. Для этого, кстати, не нужен ни шарп, ни какой другой алгоритмический язык программирования. Достаточно вполне Клиента (sqlitestudio к примеру) и, конечно, самого SQL-языка. Спроектируйте саму БД по модели из "головы", потискайте ее запросами, убедитесь, что все работает правильно.И только после этого запускайте студию и всякие там EF`ы, дапперы и прочие примочки. И только когда Ваше приложение будет работать с БД как часики, занимайтесь архивацией-разархивацией Вашей БД.
0
|
||
|
|
|||||||
| 01.12.2021, 15:48 | |||||||
![]() Добавлено через 17 минут MsGuns, или вы про вот этот случай?
0
|
|||||||
|
28 / 20 / 10
Регистрация: 01.12.2018
Сообщений: 186
|
||
| 02.12.2021, 04:42 [ТС] | ||
), то основные запросы типа select, insert, update и delete сделать не проблема, да и архивировать нечего, кроме одного файлика БД(остальное просто ресурсы, которые появляются в процессе работы программы). Мне по сути знаний языка C# не хватает, что и как правильно делать, так как все таки от С отличия кардинальные, хоть и какая-то основа с него взята. Совсем другая структура программы, поэтому сходу не получится ничего сделать и, естественно, на данном этапе эта выпускная работа делается в виде "костылей", так как пока по другому не умею, но сдавать работу надо и надо, чтобы программа работала, ну хотя бы так. Ну и все таки я нашел книгу Хейлсберга и заказал ее в бумажном виде, так как та, что советовал Andrey-MSK слишком дорогая, хотя электронную версию я себе скачал все-таки.
0
|
||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 02.12.2021, 18:54 | |
|
0
|
|
|
28 / 20 / 10
Регистрация: 01.12.2018
Сообщений: 186
|
||||||
| 02.12.2021, 19:25 [ТС] | ||||||
|
MsGuns, а что собственно там смотреть?
0
|
||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 02.12.2021, 23:53 | |
|
Ну вот, сразу же криминал
Авторы у Вас не нормализованы. А это значит, что для одной книжки будет указан М.Булгаков, а для второй М.А. Булгаков. И придется искать по ассоциации и есть вероятность того, что выборка будет неверной
0
|
|
|
28 / 20 / 10
Регистрация: 01.12.2018
Сообщений: 186
|
|
| 03.12.2021, 02:22 [ТС] | |
|
MsGuns, да, тут я согласен, сначала думал правило ввести, либо доп атрибуты имя и отчество отдельно. Но пока еше не решил, как поступить, пусть пока будет так, придерживаюсь правила ввода исключительно фамилий, так как вместе с названием запись будет уникальна, ведь в моей голове приложение изначально ориентировано не на художественную литературу
0
|
|
|
14370 / 9471 / 1360
Регистрация: 21.01.2016
Сообщений: 35,741
|
|
| 03.12.2021, 07:11 | |
|
fakemade, не надо так. Заведите для автора отдельную таблицу и на неё ссылайтесь. Это и нормализация будет и вы сможете потом пересмотреть как вы имя храните. Хотите одной строкой, хотите, разбивайте ФИО на три поля. Таблица с книгами от этого не изменится.
Если вам нужна возможность несколько авторов указать, то можно будет добавить таблицу-связь BookToAuthor, где связать множество авторов с одной книгой. Или множество книг с одним автором. Многие-ко-многим, в общем.
0
|
|
|
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
|
||
| 03.12.2021, 12:18 | ||
|
fakemade, вот это тоже вызывает подозрения
0
|
||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 03.12.2021, 15:10 | ||
|
А вот если приложение рассчитано на долгое использование, да еще и нескольких пользователей (продажа из коробки), то надо сразу же делать "по науке", т.е. как следует.
0
|
||
|
28 / 20 / 10
Регистрация: 01.12.2018
Сообщений: 186
|
|||
| 04.12.2021, 11:14 [ТС] | |||
|
Usaga, ну, вы в любом случае правы. Пока все в рамках учебного процесса, для этого и учусь, ваши замечания учту и перепроектирую БД.
Igr_ok, можно и так конечно, никто не спорит. Я засовываю в данный атрибут тип в виде текста, который в приложении предопределен и приводится к заглавным буквам при записи в БД(пример - СТАТЬЯ, КНИГА и т.д.). Создание связи обошел условно введенным вышеописанным правилом, так и выборку можно делать в принципе, ничего сложного. MsGuns, ![]() Добавлено через 3 минуты
0
|
|||
|
7094 / 2325 / 353
Регистрация: 10.12.2013
Сообщений: 8,022
|
|
| 04.12.2021, 11:39 | |
|
0
|
|
|
28 / 20 / 10
Регистрация: 01.12.2018
Сообщений: 186
|
||
| 04.12.2021, 11:52 [ТС] | ||
|
0
|
||
|
7094 / 2325 / 353
Регистрация: 10.12.2013
Сообщений: 8,022
|
|
| 04.12.2021, 13:19 | |
|
вот прям это sqlite и делает.
в версиях постарее этот функционал поддерживался с помощью модулей расширения, а в последних уже сразу всё есть на борту, и zip-архивация, и regexp. https://www.sqlite.org/sqlar.html
0
|
|
|
28 / 20 / 10
Регистрация: 01.12.2018
Сообщений: 186
|
|
| 04.12.2021, 14:14 [ТС] | |
|
volodin661, я понял, о чем вы. Ну, пока что это слишком сложно для меня, в том плане, что пока не вижу смысла заморачиваться так сильно, мне проще в zip засунуть, соблюдая всю иерархию папок и после разархивировать.
0
|
|
|
7094 / 2325 / 353
Регистрация: 10.12.2013
Сообщений: 8,022
|
|
| 04.12.2021, 14:27 | |
|
расти надо.
zip-ом то даже пьяная женщина с трудной судьбой сможет.
1
|
|
|
28 / 20 / 10
Регистрация: 01.12.2018
Сообщений: 186
|
|
| 08.12.2021, 10:29 [ТС] | |
|
volodin661, MsGuns, Usaga, Igr_ok, Andrey-MSK, прошу прощения, что я вас тревожу, не хочется отдельную тему создавать. Появился вопрос по поводу поиска в БД. У меня в программе есть поля, и мне интересно искать ту информацию, в зависимости от полей, которые заполнены, на данном этапе все хотелось бы сделать на уровне текстовых SQL команд. В начале показалось, что это просто, а потом понял, что нужно перебирать кучу условий, чтобы посмотреть какие поля заполнены, какие нет. Причем возникает сложность в том, что нужно сначала WHERE поставить, а после еще и AND ставить, поэтому я запутался. Может есть более простой способ добавлять в строку дополнительные условия, чтобы правильный SELECT делать? Спасибо
0
|
|
|
7094 / 2325 / 353
Регистрация: 10.12.2013
Сообщений: 8,022
|
||
| 08.12.2021, 10:44 | ||
|
fakemade, я не понял вопрос.
"Поля в программе" - это что имеется в виду ?
0
|
||
|
|
|
| 08.12.2021, 10:48 | |
|
fakemade, Можно попробовать использовать
StringBuilder и в зависимости от размера параметра в if подставлять в строку запроса что нужно. Примера нет, просто мои размышления
0
|
|
|
14370 / 9471 / 1360
Регистрация: 21.01.2016
Сообщений: 35,741
|
||
| 08.12.2021, 11:08 | ||
|
1. Или использовать ORM с генерацией запросов (EF, Linq2Db). Там можно предикаты в выражения динамически набивать. Оно потом само сгенерит корректный запрос. 2. Собирать запрос руками, используя тот же StringBuilder, что выше посоветовали и отдельную коллекцию условий. Но, в зависимости от того где и какие поля вы будете трогать в базе, генератор может получиться сложноватый (хотя тут кому как). Ведь может понадобиться не только в поле смотреть, но и в JOIN нужную таблицу добавлять. Сразу скажу, что если выберете второй вариант, то: 1. Никаких WHERE 1 = 1 OR ... не нужно делать. Это - дно.2. Никаких WHERE @Param IS NULL OR LEN(@Param) = 0 не нужно делать. Это почти дно.3. JOIN'ить все таблицы вне зависимости от того нужны они или нет, не нужно делать. Это - дно. Попробуйте подход с генерацией запроса руками. Опыта ради. Будет интересно.
0
|
||
| 08.12.2021, 11:08 | |
|
Небольшая проблема с классами Небольшая проблема в проектировании БД Небольшая проблема с кодом Cportlib небольшая проблема
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928
Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
|
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего
Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
|
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы
Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
|
|
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока
Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
|
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
|
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат»
Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
|
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
|