Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Oskolok_Lda
1 / 1 / 0
Регистрация: 29.01.2009
Сообщений: 55
1

SQLite Заполнение Combobox

25.04.2018, 11:56. Просмотров 1105. Ответов 69
Метки нет (Все метки)

День добрый!
Программа использовала MS SQL LocalDB. Хочу перевести на SQLite. Все компоненты установлены, подключение происходит. При выполнении SQL-запроса ошибка System.Data.SQLite.SQLiteException: "SQL logic error no such table: Otdel". Данная таблица существует, т.к. данный запрос корректно отрабатывается в DB Browser for SQLite. Заполнение делаю так
C#
1
2
3
4
5
6
7
            SQLiteConnection conn = new SQLiteConnection("Data Source=Akt_DB.db;Version=3;New=False;Compress=True;");
            SQLiteCommand command = new SQLiteCommand("select * from Otdel", conn);
            conn.Open();
            DbDataReader reader = command.ExecuteReader();
            while (reader.Read())
                OtdelComboBox.Items.Add((string)reader["Nazvanie"]);         //СтолбецТаблицы
            conn.Close();
В чем ошибка?

Заранее благодарен.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2018, 11:56
Ответы с готовыми решениями:

Заполнение ComboBox в соответствии со значением другого ComboBox
Значицца имеются, например, две таблички: Дисциплина (Математика, История,...

Заполнение DataGridView с SQLite БД
Здравствуйте! Есть sqlite БД. На мэйн форме есть DataGridview1, один текстбокс...

заполнение базы sqlite
есть фрагмент кода connection.Open(); SQLiteCommand comm = new...

Заполнить comboBox из таблицы SQLite
Подскажите как заполнить comboBox из значениями столбца таблицы SQLite. Без...

SQLite ComboBox.Text no curren row
Добрый день! Делаю запрос: SQLiteCommand select_protocols = new...

69
Oskolok_Lda
1 / 1 / 0
Регистрация: 29.01.2009
Сообщений: 55
03.05.2018, 15:43  [ТС] 41
Согласен.
Начал делать заполнение массива. Не могу понять как привязать переменные набора к данным из БД
C#
1
2
3
4
5
6
7
8
SQLiteCommand command = new SQLiteCommand("SELECT * FROM Otdel", SQLite_conn);
            SQLiteDataReader reader = command.ExecuteReader();
            List<string[]> Departments = new List<string[]>();
            while (reader.Read())
            {
                Departments.Add(new string[dt_Otdel.Rows.Count]); //указал количество строк
                reader.ToString();
            }
Вот этот момент. Тут шло заполнение вручную
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var depts = new List<Departement>
            {
                new Departement
                {
                    ID = 1,
                    Name = "Продажи"
                },
                new Departement
                {
                    ID = 2,
                    Name = "Работа с клиентами"
                },
                new Departement
                {
                    ID = 3,
                    Name = "Связи с общественностью"
                }
            };
Добавлено через 1 час 6 минут
Вот так написал, но почему-то все пусто
C#
1
2
3
4
5
6
7
8
            List<string[]> Departments = new List<string[]>();
            while (reader.Read())
            {
                Departments.Add(new string[dt_Otdel.Rows.Count]);
 
                    string ID = reader["Kod_Otdela"].ToString();
                    string Name = reader["Otdel"].ToString();
            }
0
Usaga
Эксперт .NET
5042 / 3371 / 603
Регистрация: 21.01.2016
Сообщений: 13,264
Завершенные тесты: 2
03.05.2018, 17:30 42
Цитата Сообщение от Oskolok_Lda Посмотреть сообщение
Вот так написал, но почему-то все пусто
Наверное потому, что вы ничем список не заполняете?
0
Oskolok_Lda
1 / 1 / 0
Регистрация: 29.01.2009
Сообщений: 55
04.05.2018, 09:58  [ТС] 43
Цитата Сообщение от Usaga Посмотреть сообщение
ничем список не заполняете
Я думал, что происходит. ID.Count = 1. И все на этом
Нужно как-то так, но не могу сообразить как правильно записать
C#
1
2
3
4
5
6
7
8
while (reader.Read())
            {
                Departments.Add(new string[dt_Otdel.Rows.Count]);
                
                   Departments[Kod_Otdela]  = reader["Kod_Otdela"];
                   Departments[Otdel] = reader["Otdel"];
                
            }
0
Usaga
Эксперт .NET
5042 / 3371 / 603
Регистрация: 21.01.2016
Сообщений: 13,264
Завершенные тесты: 2
04.05.2018, 10:00 44
Oskolok_Lda, вы на мой пример внимательнее посмотрите. Там список объектов класса Department, в свойствах которого всё и хранится (ID и название). А вы что делаете?
0
Oskolok_Lda
1 / 1 / 0
Регистрация: 29.01.2009
Сообщений: 55
04.05.2018, 10:12  [ТС] 45
Я правильно понимаю, что заполнение должно происходить в цикле?
Как по примеру у меня ошибки...Вот...
0
Миниатюры
SQLite Заполнение Combobox  
Oskolok_Lda
1 / 1 / 0
Регистрация: 29.01.2009
Сообщений: 55
04.05.2018, 10:25  [ТС] 46
Делаю как в примере
C#
1
2
3
4
5
6
7
namespace AKT
{
    public class Departement
    {
        public string Kod_Otdela { get; set; }
        public string Otdel { get; set; }
    }
Там же описать var depts = new List<Departement> не могу, т.к. заполнение должно происходить в цикле, поэтому делаю в Form1.Load
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private void Form1_Load(object sender, EventArgs e)
        {
            SQLite_conn.Open();
            DataTable dt_Otdel = new DataTable();
            DataSet ds_Otdel = new DataSet();
            SQLiteDataAdapter da_Otdel = new SQLiteDataAdapter("select * from Otdel", SQLite_conn);
            SQLiteCommand command = new SQLiteCommand("SELECT * FROM Otdel", SQLite_conn);
            SQLiteDataReader reader = command.ExecuteReader();
            //List<string[]> Departments = new List<string[]>();
            var depts = new List<Departement>
            {
                new Departement
                {
                    while (reader.Read()) 
            {
                //Departement. Add(new string[dt_Otdel.Rows.Count]);
                Kod_Otdela = reader["Kod_Otdela"];
                Otdel = reader["Otdel"];
            }
        }
            }
Но все в ошибках.... Я не понимаю...
0
Oskolok_Lda
1 / 1 / 0
Регистрация: 29.01.2009
Сообщений: 55
04.05.2018, 10:27  [ТС] 47
.....
0
Миниатюры
SQLite Заполнение Combobox  
Usaga
Эксперт .NET
5042 / 3371 / 603
Регистрация: 21.01.2016
Сообщений: 13,264
Завершенные тесты: 2
04.05.2018, 10:58 48
Oskolok_Lda, что это за ахинея? Вы методом тыка пытаетесь код писать? Создавать объект и пихать в List нужно внутри цикла.
0
Oskolok_Lda
1 / 1 / 0
Регистрация: 29.01.2009
Сообщений: 55
04.05.2018, 11:15  [ТС] 49
Цитата Сообщение от Usaga Посмотреть сообщение
Создавать объект и пихать в List нужно внутри цикла.
Исправил. все равно пусто и depts не существует в данном контексте
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
private void Form1_Load(object sender, EventArgs e)
        {
            SQLite_conn.Open();
            DataTable dt_Otdel = new DataTable();
            DataSet ds_Otdel = new DataSet();
            SQLiteDataAdapter da_Otdel = new SQLiteDataAdapter("select * from Otdel", SQLite_conn);
            SQLiteCommand command = new SQLiteCommand("SELECT * FROM Otdel", SQLite_conn);
            SQLiteDataReader reader = command.ExecuteReader();
            //List<string[]> Departments = new List<string[]>();
            while (reader.Read())
            {
                var depts = new List<Departement>
                 {
                        new Departement
                        {
                            Kod_Otdela = reader["Kod_Otdela"].ToString(),
                            Otdel = reader["Otdel"].ToString()
                        }
                };
            }
            da_Otdel.Fill(dt_Otdel);
            OtdelComboBox.DataSource = depts;
            OtdelComboBox.DisplayMember = "Name";
            OtdelComboBox.ValueMember = "ID";
0
Tessio
68 / 76 / 42
Регистрация: 12.05.2015
Сообщений: 318
Завершенные тесты: 1
04.05.2018, 11:51 50
Цитата Сообщение от Oskolok_Lda Посмотреть сообщение
все равно пусто и depts не существует в данном контексте
И не удивительно, область видимости переменной depts - тело цикла. Надо инициализировать переменную вне цикла.
0
Oskolok_Lda
1 / 1 / 0
Регистрация: 29.01.2009
Сообщений: 55
04.05.2018, 12:26  [ТС] 51
А как ее инициализировать вне цикла, если она объявлена в цикле?
Если объявлять вне цикла var depts = new List<Departement>, то тогда я не знаю делать заполнение в цикле....
0
Tessio
68 / 76 / 42
Регистрация: 12.05.2015
Сообщений: 318
Завершенные тесты: 1
04.05.2018, 13:01 52
Цитата Сообщение от Oskolok_Lda Посмотреть сообщение
тогда я не знаю делать заполнение в цикле
Добавлять в список с помощью метода Add(T).
0
Oskolok_Lda
1 / 1 / 0
Регистрация: 29.01.2009
Сообщений: 55
04.05.2018, 13:23  [ТС] 53
Цитата Сообщение от Tessio Посмотреть сообщение
Добавлять в список с помощью метода Add(T).
Я не пойму. Это должно быть в цикле
C#
1
2
3
4
5
6
7
 var depts = new List<Departement>
                 {
                        new Departement
                        {
                            Kod_Otdela = reader["Kod_Otdela"].ToString(),
                            Otdel = reader["Otdel"].ToString()
                        }
т.к.
Цитата Сообщение от Usaga Посмотреть сообщение
Oskolok_Lda, Создавать объект и пихать в List нужно внутри цикла.
Теперь это var depts = new List<Departement> вынести за пределы цикла. Как это вынести если...... Я запутался..... Если это
C#
1
2
3
4
5
new Departement
                        {
                            Kod_Otdela = reader["Kod_Otdela"].ToString(),
                            Otdel = reader["Otdel"].ToString()
                        }
без этого выдает ошибки
C#
1
var depts = new List<Departement>
0
Tessio
68 / 76 / 42
Регистрация: 12.05.2015
Сообщений: 318
Завершенные тесты: 1
04.05.2018, 13:26 54
Цитата Сообщение от Oskolok_Lda Посмотреть сообщение
Я запутался
C#
1
2
3
4
5
6
7
8
9
var depts = new List<Departement>();
while (reader.Read())
{
    depts.Add(new Departement
    {
        Kod_Otdela = reader["Kod_Otdela"].ToString(),
        Otdel = reader["Otdel"].ToString()
    });
}
0
Oskolok_Lda
1 / 1 / 0
Регистрация: 29.01.2009
Сообщений: 55
04.05.2018, 13:33  [ТС] 55
Компиляция прошла, но OtdelComboBox.DataSource = depts; пуст. Т. е. заполнение опять не произошло?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
            SQLite_conn.Open();
            DataTable dt_Otdel = new DataTable();
            DataSet ds_Otdel = new DataSet();
            SQLiteDataAdapter da_Otdel = new SQLiteDataAdapter("select * from Otdel", SQLite_conn);
            SQLiteCommand command = new SQLiteCommand("SELECT * FROM Otdel", SQLite_conn);
            SQLiteDataReader reader = command.ExecuteReader();
            var depts = new List<Departement>();
            while (reader.Read())
            {
                depts.Add(new Departement
                {
                    Kod_Otdela = reader["Kod_Otdela"].ToString(),
                    Otdel = reader["Otdel"].ToString()
                });
            }
            //SQLiteDataAdapter da_People = new SQLiteDataAdapter("select * from People", SQLite_conn);
            da_Otdel.Fill(dt_Otdel);
            //da_People.Fill(ds_People, "People");
           
            OtdelComboBox.DataSource = depts;
            //FIOComboBox.DataSource = ds_People.Tables["People"];
            OtdelComboBox.DisplayMember = "Otdel";
            OtdelComboBox.ValueMember = "Kod_Otdela";
0
Usaga
Эксперт .NET
5042 / 3371 / 603
Регистрация: 21.01.2016
Сообщений: 13,264
Завершенные тесты: 2
04.05.2018, 13:38 56
Oskolok_Lda, я вам говорил добавлять записи в коллекцию внутри цикла, а не пересоздавать коллекцию каждый раз на каждой итерации внутри цикла.

Вы C# в первый раз видите что ли?

Добавлено через 2 минуты
Цитата Сообщение от Oskolok_Lda Посмотреть сообщение
Компиляция прошла, но OtdelComboBox.DataSource = depts; пуст.
Что значит "пуст"? Посмотрите в отладчике содержимое полученной коллекции.
0
Oskolok_Lda
1 / 1 / 0
Регистрация: 29.01.2009
Сообщений: 55
04.05.2018, 13:38  [ТС] 57
Цитата Сообщение от Usaga Посмотреть сообщение
Вы C# в первый раз видите что ли
Да. Я об этом давно написал.
0
Tessio
68 / 76 / 42
Регистрация: 12.05.2015
Сообщений: 318
Завершенные тесты: 1
04.05.2018, 13:41 58
Цитата Сообщение от Oskolok_Lda Посмотреть сообщение
Да. Я об этом давно написал.
Тогда вы не с того начали. Начните вот с этой темы и подберите что почитать. Это будет намного продуктивнее, чем писать код наугдад.
0
Oskolok_Lda
1 / 1 / 0
Регистрация: 29.01.2009
Сообщений: 55
04.05.2018, 13:44  [ТС] 59
вот..
0
Миниатюры
SQLite Заполнение Combobox  
Oskolok_Lda
1 / 1 / 0
Регистрация: 29.01.2009
Сообщений: 55
04.05.2018, 13:55  [ТС] 60
Цитата Сообщение от Tessio Посмотреть сообщение
Тогда вы не с того начали. Начните вот с этой темы и подберите что почитать. Это будет намного продуктивнее, чем писать код наугдад.
Спасибо за ссылку, почитаю. Но с использованием LocalDB, как то наугад получилось. Я раньше немного на Delphi писал. Думал интуитивно получится. с использованием LocalDB - получилось, думал заменю на SQLite и все. А тут.... ну собственно все видно по диалогу))

Добавлено через 7 минут
Цитата Сообщение от Usaga Посмотреть сообщение
Что значит "пуст"? Посмотрите в отладчике содержимое полученной коллекции.
Картинку отладчика приложил, + сам Combobox - пуст.
0
04.05.2018, 13:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2018, 13:55

Заполнение ComboBox
Есть метод, который записывает данные с БД в textbox. Помогите переписать этот...

Заполнение combobox из БД
Заполняю combobox из БД с условием, но в cb пусто... private void...

Заполнение combobox из БД
Здравствуйте! Есть у меня несколько comboBox`ов, пусть &quot;марка авто&quot;, &quot;цвет&quot;...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru