Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/47: Рейтинг темы: голосов - 47, средняя оценка - 4.72
0 / 0 / 1
Регистрация: 26.06.2018
Сообщений: 120

Подключение к БД SQLite

31.03.2020, 07:10. Показов 10063. Ответов 54

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Хелп ми! Всю голову сломал. Создаю приложение android в Xamarin C#. Есть два выпадающих списка (Picker) первый - марки авто, а второй модели. Тема такая марки уже все есть, при выборе марки авто, список моделий должен быть заполнен в соответствии с выбранной маркой. Я решил сделать это через localBD - локальную базу данных которая имеет следующую структуру id, mark, model. Выборку я решил делать SQL запросом т.к. посчитал этот способ менее геморным (ОШИБАЛСЯ) command.CommandText = "SELECT Model From Cars WHERE Mark = " + selection + connection;
string selection = picker1.Items[picker1.SelectedIndex];
Вот код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System;
using Xamarin.Forms;
using System.IO;
using System.Data;
using System.Data.Common;
 
using Microsoft.Data.Sqlite;   // <<< Первая библиотека 
 
namespace App1
{
    public partial class View1 : ContentPage
    {
       public View1()
        {
            InitializeComponent();
        }
        void picker1_SelectedIndexChanged(object sender, EventArgs e)
        {        
         string selection = picker1.Items[picker1.SelectedIndex];
            using (SqliteConnection connection = new SqliteConnection(@"Data Source =  " + Environment.CurrentDirectory + "localBD.db"))
            {
                connection.Open();
                using (SqliteCommand command = new SqliteCommand())
                {
                    command.CommandText = "SELECT Model From Cars WHERE  Mark = " + selection + connection;
                    command.CommandType = CommandType.Text;
                    command.ExecuteNonQuery();
                    SqliteDataReader reader = command.ExecuteReader();
                    while (reader.Read())
                    {
                        picker2.Items.Add(Convert.ToString(reader["Model"]));
                    }
                }
            }
        }
    }
}
Ругается на эту строчку
C#
1
 using (SqliteConnection connection = new SqliteConnection(@"Data Source =  " + Environment.CurrentDirectory + "localBD.db"))
Говорит что ошибка: System.TypeInitializationException: 'The type initializer for 'Microsoft.Data.Sqlite.SqliteConnection' threw an exception.'

Если использовать другую библиотеку не using Microsoft.Data.Sqlite; а using System.Data.SQLite;
и соответственно код будет такой:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System;
using Xamarin.Forms;
using System.IO;
using System.Data;
using System.Data.Common;
 
 
 
//using Microsoft.Data.Sqlite;
using System.Data.SQLite;
 
namespace App1
{
    public partial class View1 : ContentPage
    {       
        public View1()
        {
            InitializeComponent();
        }
        void picker1_SelectedIndexChanged(object sender, EventArgs e)
        {         
        string selection = picker1.Items[picker1.SelectedIndex];
            using (SQLiteConnection connection = new SQLiteConnection(@"Data Source =  " + Environment.CurrentDirectory + "localBD.db"))
            {
                connection.Open();
               using (SQLiteCommand command = new SQLiteCommand(connection))
                {
                    command.CommandText = "SELECT Model From Cars WHERE  Mark = " + selection + connection;
                    command.CommandType = CommandType.Text;
                    command.ExecuteNonQuery();
                    SQLiteDataReader reader = command.ExecuteReader();
                    while (reader.Read())
                    {
                        picker2.Items.Add(Convert.ToString(reader["Model"]));
                    }
                }
            }
        }
    }
}
Ошибка будет следующая:
System.DllNotFoundException: 'SQLite.Interop.dll assembly:<unknown assembly> type:<unknown type> membernull)'
Что в первом что во втором случае ошибка возникает уже после компиляции приложении при изменении первого Picker марок.
C#
1
2
   void picker1_SelectedIndexChanged(object sender, EventArgs e)
        {
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.03.2020, 07:10
Ответы с готовыми решениями:

Подключение SQLite
файл создается, но проблема возникает именно при создании таблиц, строка 33 using System; using System.Collections.Generic; using...

Подключение к БД SQLite
При попытке создания подключения к БД SQLite (вернее создания файла БД) получаю исключение в строке: using (SQLiteConnection con = new...

SQLite EF подключение нескольких таблиц
Всем привет. Посмотрел этот замечательный пример работы с SQLite https://metanit.com/sharp/wpf/21.2.php. Для посмотреть/поиграть добавил...

54
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
02.04.2020, 11:39
Студворк — интернет-сервис помощи студентам
Agent654, https://stackoverflow.com/ques... t-sqlite-x
0
Эксперт .NET
 Аватар для Usaga
14370 / 9471 / 1360
Регистрация: 21.01.2016
Сообщений: 35,742
02.04.2020, 11:40
Kazbek17, я на это уже указывал. Только надо учитывать, что это проект Xamarin, значит под мобилки. Значит SQLite.Interop.dll нужна под Android нужной архитектуры.
0
0 / 0 / 1
Регистрация: 26.06.2018
Сообщений: 120
02.04.2020, 11:43  [ТС]
Я этот файл "SQLite.Interop.dll" скачал и положил везде куда только можно и нельзя. Не работает (
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
02.04.2020, 11:54
Цитата Сообщение от Usaga Посмотреть сообщение
Значит SQLite.Interop.dll нужна под Android нужной архитектуры.
А можно чуть подробнее либо ссыль ?
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
02.04.2020, 12:09
Цитата Сообщение от Agent654 Посмотреть сообщение
Я этот файл "SQLite.Interop.dll" скачал и положил везде куда только можно и нельзя. Не работает (
вы можете проект к сообщению прикрепить?)
иначе возиться будем еще и возиться
0
0 / 0 / 1
Регистрация: 26.06.2018
Сообщений: 120
02.04.2020, 12:24  [ТС]
Да могу, вот.
https://yadi.sk/d/u7mbMcgFjcej5A
0
Эксперт .NET
 Аватар для Usaga
14370 / 9471 / 1360
Регистрация: 21.01.2016
Сообщений: 35,742
02.04.2020, 12:43
Цитата Сообщение от Почтальон Посмотреть сообщение
А можно чуть подробнее либо ссыль ?
Речь о том, что SQLite написана на Си. Соответственно, зависима от ОС и архитектуры процессора. Когда вы подключаете пакет с SQLite, то ставится System.Data.SQLite (или как она там называется) и две неуправляемые DLL-библиотеки. Всё это заточено под винду и работать под Android в таком виде не будет. Нужно или искать пакет под андроид или руками как-то подкладывать такие библиотеки.
1
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
02.04.2020, 12:52
Цитата Сообщение от Agent654 Посмотреть сообщение
Да могу, вот.
https://yadi.sk/d/u7mbMcgFjcej5A
а чего вы не используете SQLite-net?

https://www.nuget.org/packages/sqlite-net-pcl
0
0 / 0 / 1
Регистрация: 26.06.2018
Сообщений: 120
02.04.2020, 12:55  [ТС]
Та я просто не знаю как что лучше и использовал что нашёл.
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
02.04.2020, 12:59
Цитата Сообщение от Agent654 Посмотреть сообщение
Та я просто не знаю как что лучше и использовал что нашёл.
тот пакет на который я дал ссылку выше поставьте и все
0
0 / 0 / 1
Регистрация: 26.06.2018
Сообщений: 120
02.04.2020, 13:29  [ТС]
Подключил библиотеку. Ошибка. Я не знаю как через тот пакет подключение реализовать.
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
02.04.2020, 15:26
Цитата Сообщение от Agent654 Посмотреть сообщение
Подключил библиотеку. Ошибка. Я не знаю как через тот пакет подключение реализовать.
какая ошибка?
0
0 / 0 / 1
Регистрация: 26.06.2018
Сообщений: 120
02.04.2020, 15:39  [ТС]
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка CS1061 "SQLiteConnection" не содержит определения "Open", и не удалось найти доступный метод расширения "Open", принимающий тип "SQLiteConnection" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку). App5 C:\Users\Timmy_Tayn\source\repos\App5\Ap p5\App5\MainPage.xaml.cs 34 Активные
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
02.04.2020, 15:52
Цитата Сообщение от Agent654 Посмотреть сообщение
Ошибка CS1061 "SQLiteConnection" не содержит определения "Open", и не удалось найти доступный метод расширения "Open", принимающий тип "SQLiteConnection" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)
вы хоть читайте описание к проекту))

добавьте класс

C#
1
2
3
4
5
6
7
8
    public class Cars
    {
        public int Id { get; set; }
 
        public string Mark { get; set; }
 
        public string Model { get; set; }
    }
в конструкторе напишите

C#
1
2
3
4
5
6
7
private readonly SQLiteConnection db;
public MainPage()
{
    InitializeComponent();
    db = new SQLiteConnection(dbPath);
    db.CreateTable<Cars>();
}
ну и ваш обработчик перепишите

C#
1
2
3
string selection = picker1.Items[picker1.SelectedIndex];
var cars = db.Query<Cars>("SELECT Model From Cars WHERE  Mark = ?", selection);
picker2.ItemsSource = cars;
код не проверял но должно работать))
0
Эксперт .NET
 Аватар для Usaga
14370 / 9471 / 1360
Регистрация: 21.01.2016
Сообщений: 35,742
02.04.2020, 16:32
Цитата Сообщение от FateOri Посмотреть сообщение
код не проверял но должно работать))
А мне кажется, что не должно. Вот это:

Цитата Сообщение от FateOri Посмотреть сообщение
var cars = db.Query<Cars>("SELECT Model From Cars WHERE  Mark = ?", selection);
Попахивает даппером, который ещё подключить к проекту надо.

А это я хз откуда.
Цитата Сообщение от FateOri Посмотреть сообщение
db.CreateTable<Cars>();
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
02.04.2020, 16:48
Цитата Сообщение от Usaga Посмотреть сообщение
Попахивает даппером, который ещё подключить к проекту надо.
я давал ссылку на пакет в сообщениях выше))

ну дам еще ссылку на гитхаб

https://github.com/praeclarum/sqlite-net

библиотека довольно известная))
0
Эксперт .NET
 Аватар для Usaga
14370 / 9471 / 1360
Регистрация: 21.01.2016
Сообщений: 35,742
02.04.2020, 16:52
FateOri, я понял. Это ORM для SQLite. Тогда уж лучше использовать что-то помощнее типа Linq2Db или EF Core.
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
02.04.2020, 17:06
Цитата Сообщение от Usaga Посмотреть сообщение
FateOri, я понял. Это ORM для SQLite. Тогда уж лучше использовать что-то помощнее типа Linq2Db или EF Core.
тянуть EF для такой маленькой БД это бить из пушки по воробьям)
0
Эксперт .NET
 Аватар для Usaga
14370 / 9471 / 1360
Регистрация: 21.01.2016
Сообщений: 35,742
02.04.2020, 17:17
FateOri, а EF настолько огромен и необъятен?)) Как и sqlite-net - это одна библиотечка. Ну ладно, две, сам EF и провайдер для SQLite. Просто, если браться за ORM, то можно сразу и покруче чего взять.

Добавлено через 2 минуты
Тут ещё какой момент: знания EF (Core), Dapper, Linq2Db переиспользуемы с другими СУБД. А с этой либой?
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
02.04.2020, 17:25
Цитата Сообщение от Usaga Посмотреть сообщение
FateOri, а EF настолько огромен и необъятен?))
ну скажем так EF кучу нюансов содержит
за EF Core не говорю я с ним толком не работал или там ситуация намного лучше??
но с EF 6 далеко не всегда сходу было понятно почему получается тот или иной результат и старт вышел не самый гладкий

Цитата Сообщение от Usaga Посмотреть сообщение
Тут ещё какой момент: знания EF (Core), Dapper, Linq2Db переиспользуемы с другими СУБД. А с этой либой?
тут надо sql самому писать практически для всего
с EF никак не поможет, на Dapper чем-то похоже, да
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.04.2020, 17:25

Подключение к SqLite БД с локального компьютера
Здравствуйте! Есть программа которая работает с БД Sqlite. Имя файла БД file.sdf. База установлена например на компьютере у которого ip...

Подключение к Sqlite
Имеется программа, написанная на Qt 4.7.4, которая присоединяется к БД Sqlite и выполняет большое число запросов. Проблема следующего рода:...

Подключение Sqlite
Добрый вечер,столкнулся я с проблемкой. До недавнего времени решил начать знакомство с Qt. Всё шло гладко,но вот незадача. Сколько бы я...

Подключение SQLite
Здравствуйте! У меня возникла проблема с работой с SQLite в WP. Выполнял всё по этой инструкции. однако у меня возникли проблемы, все...

Подключение БД SQlite к Excel
Подскажите пожалуйста, как еще можно подключить БД SQLite к Excel, кроме как посредством ODBC? Так как через ODBC запросы обрабатываются...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Теория всего 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
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru