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

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

31.03.2020, 07:10. Показов 10228. Ответов 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
14783 / 9557 / 1366
Регистрация: 21.01.2016
Сообщений: 36,033
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
14783 / 9557 / 1366
Регистрация: 21.01.2016
Сообщений: 36,033
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
14783 / 9557 / 1366
Регистрация: 21.01.2016
Сообщений: 36,033
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
14783 / 9557 / 1366
Регистрация: 21.01.2016
Сообщений: 36,033
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
14783 / 9557 / 1366
Регистрация: 21.01.2016
Сообщений: 36,033
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
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru