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

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

31.03.2020, 07:10. Показов 10074. Ответов 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
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
02.04.2020, 18:03
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Usaga Посмотреть сообщение
FateOri, а EF настолько огромен и необъятен?))
ну скажем так EF кучу нюансов содержит
за EF Core не говорю я с ним толком не работал или там ситуация намного лучше??
но с EF 6 далеко не всегда сходу было понятно почему получается тот или иной результат и старт вышел не самый гладкий

Цитата Сообщение от Usaga Посмотреть сообщение
Тут ещё какой момент: знания EF (Core), Dapper, Linq2Db переиспользуемы с другими СУБД. А с этой либой?
тут надо sql самому писать практически для всего
с EF никак не поможет, на Dapper чем-то похоже, да
0
0 / 0 / 1
Регистрация: 26.06.2018
Сообщений: 120
03.04.2020, 09:23  [ТС]
Всё запускается, всё работает без ошибок. Но таблица пустая.
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
41
42
43
44
45
46
47
48
49
50
51
52
53
using SQLite;
using System;
using System.IO;
using Xamarin.Forms;
 
namespace App5
{
 
    public partial class MainPage : ContentPage
    {
 
        public class Cars
        {
            [PrimaryKey, AutoIncrement]
            public int Id { get; set; }
 
            public string Mark { get; set; }
 
            public string Model { get; set; }
        }
        private readonly SQLiteConnection db;
 
        public MainPage()
        {
            string dbPath = Path.Combine(
           Environment.GetFolderPath(Environment.SpecialFolder.Personal),
           "localDB.db");
 
            InitializeComponent();
            db = new SQLiteConnection(dbPath);
            db.CreateTable<Cars> ();
        }
 
        void picker1_SelectedIndexChanged(object sender, EventArgs e)
        {
 
 
 
            string selection = picker1.Items[picker1.SelectedIndex];
 
              
            var cars = db.Query<Cars>("SELECT Model From Cars WHERE [Mark] = ?", selection);
            picker2.ItemsSource = cars;
            int count = db.Table<Cars> ().Count();
 
            for (int i = 0; i  < count; i++)
            {
 
            }
           DisplayAlert("Уведомление", Convert.ToString(count), "ОK");
}
}
}
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
03.04.2020, 10:51
Цитата Сообщение от Agent654 Посмотреть сообщение
Всё запускается, всё работает без ошибок. Но таблица пустая.
поясните? пустая таблица в localDB ?
0
0 / 0 / 1
Регистрация: 26.06.2018
Сообщений: 120
03.04.2020, 12:28  [ТС]
Не не не, там заполненная. Результат выполнения команды 0 строк. А в самой базе работает.
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
03.04.2020, 13:40
Цитата Сообщение от Agent654 Посмотреть сообщение
Не не не, там заполненная. Результат выполнения команды 0 строк. А в самой базе работает.
cars пуст?
0
0 / 0 / 1
Регистрация: 26.06.2018
Сообщений: 120
03.04.2020, 14:10  [ТС]
да. Cars пуст
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
03.04.2020, 14:16
Цитата Сообщение от Agent654 Посмотреть сообщение
да. Cars пуст
ну а ваша localDB.db точно заполнена?
0
0 / 0 / 1
Регистрация: 26.06.2018
Сообщений: 120
03.04.2020, 16:28  [ТС]
да. Она заполнена.

Добавлено через 2 часа 0 минут
Может проблема в запросе ?
Просто в самой бд sql запрос работает если его писать так
SQL
1
SELECT Model FROM Cars WHERE [Mark] = "BMW"
а в C# на это ругается компилятор.
C#
1
var cars = db.Query<Cars>("SELECT Model From Cars WHERE [Mark] = ?\"", selection, "\"");
0
0 / 0 / 1
Регистрация: 26.06.2018
Сообщений: 120
05.04.2020, 07:34  [ТС]
Так как вы считаете, в чём ошибка ?
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
05.04.2020, 07:53
Agent654,
Цитата Сообщение от Agent654 Посмотреть сообщение
var cars = db.Query<Cars>("SELECT Model From Cars WHERE [Mark] = ?"", selection, """);
Кол-во знаков вопроса должно равняться кол-ву параметров.
0
0 / 0 / 1
Регистрация: 26.06.2018
Сообщений: 120
05.04.2020, 12:53  [ТС]
Так там вроде всё правильно в этом плане.
0
0 / 0 / 1
Регистрация: 26.06.2018
Сообщений: 120
08.04.2020, 06:41  [ТС]
Этот файл, есть во всех папках проекта. Где только можно и нельзя. Не работает.
0
Эксперт .NET
 Аватар для Usaga
14371 / 9478 / 1360
Регистрация: 21.01.2016
Сообщений: 35,750
08.04.2020, 06:43
Цитата Сообщение от FateOri Посмотреть сообщение
ну скажем так EF кучу нюансов содержит
за EF Core не говорю я с ним толком не работал или там ситуация намного лучше??
но с EF 6 далеко не всегда сходу было понятно почему получается тот или иной результат и старт вышел не самый гладкий
Каких нюансов?

Agent654, вам бы на обычном консольном проекте потренироваться чтоли. Как-то туго вам пока даётся работа с SQLite.
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
08.04.2020, 10:52
Цитата Сообщение от Usaga Посмотреть сообщение
Каких нюансов?
это было несколько лет назад я уже и не вспомню в чем там дело было))

что-то с дублированием данных

Добавлено через 2 минуты
Цитата Сообщение от Agent654 Посмотреть сообщение
Этот файл, есть во всех папках проекта. Где только можно и нельзя. Не работает.
а у вас путь к файлу Environment.SpecialFolder.Personal а не к папке с проектом
0
0 / 0 / 1
Регистрация: 26.06.2018
Сообщений: 120
08.04.2020, 11:03  [ТС]
немного не понял. Что в место этого нужно написать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.04.2020, 11:03

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
55
Ответ Создать тему
Новые блоги и статьи
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru