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

Как поместить результат sql-запроса в List<>?

28.02.2016, 16:36. Показов 12926. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне нужно поместить
SQL
1
SELECT * FROM [таблица]
в список List, чтобы потом с ним работать, в таблице два столбца id и name
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.02.2016, 16:36
Ответы с готовыми решениями:

Как передать результат sql-запроса в List<>?
SELECT * FROM Напишите пожалуйста как это реализовать. Если можно на примере...

Как поместить результат SQL запроса в Edit?
У нас есть БД: нужно вопрос &quot;Как зовут Красовского&quot; поместить в Edit,Label,RadioButton, и только в них. Делал так...

Как получить результат SQL запроса INNER JOIN трех таблиц, в виде List (объектов(строк) через Spring Data JPA ?
Как получить результат SQL запроса INNER JOIN трех таблиц, в виде List&lt;объектов(строк)&gt; через Spring Data JPA ? Есть три таблицы ...

28
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
28.02.2016, 17:15
Цитата Сообщение от Green01 Посмотреть сообщение
Мне нужно поместить
Так создайте тип с нужными свойствами, создавайте объекты этого типа и добавляйте их в List<T>.
0
0 / 0 / 1
Регистрация: 27.09.2015
Сообщений: 121
28.02.2016, 17:29  [ТС]
insite2012, а можно поподробнее, на примере, если не трудно
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
28.02.2016, 17:52
Лучший ответ Сообщение было отмечено Green01 как решение

Решение

Цитата Сообщение от Green01 Посмотреть сообщение
можно поподробнее, на примере, если не трудно
Сначала создаете объект.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Runtime.Serialization;
 
namespace servicelib.DataContracts {
    [DataContract(Namespace="UserService")]
    public class User {
        [DataMember]
        [DisplayName("Имя пользователя")]
        public string Name { get; set; }
        [DataMember]
        [DisplayName("Возраст пользователя")]
        public int Age { get; set; }
    }
}
А потом уже пишете код с его использованием.
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
54
55
56
57
58
59
60
61
62
63
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data.SQLite;
 
using servicelib.DataContracts;
 
namespace servicelib.Common {
    class SQLiteProvider {
        static string CONNECT_STR = string.Format("Data Source={0}",
            Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "database.db"));
 
        public User[] GetUsers() {
            string selectStr = "SELECT * FROM Users";
            List<User> users = new List<User>();
            using (SQLiteConnection cnn = new SQLiteConnection(CONNECT_STR)) {
                cnn.Open();
                using (SQLiteCommand cmd = new SQLiteCommand(selectStr, cnn)) {
                    using (SQLiteDataReader dr = cmd.ExecuteReader()) {
                        while (dr.Read()) {
                            User user = new User {
                                Name = (string)dr["name"],
                                Age = int.Parse(dr["age"].ToString())
                            };
                            users.Add(user);
                        }
                    }
                }
            }
            return users.ToArray();
        }
 
        public void AddUser(User user, UserOperations operation) {
            string selectStr = string.Format("SELECT * FROM Users WHERE name='{0}' AND age='{1}'",
                user.Name, user.Age);
            string insertStr = string.Format("INSERT INTO Users VALUES('{0}','{1}')",
                user.Name, user.Age);
            string deleteStr = string.Format("DELETE FROM Users WHERE name='{0}' AND age='{1}'",
                user.Name, user.Age);
            string command = (operation == UserOperations.INSERT) ? insertStr : deleteStr;
            using (SQLiteConnection cnn = new SQLiteConnection(CONNECT_STR)) {
                cnn.Open();
                using (SQLiteCommand cmd = new SQLiteCommand(selectStr, cnn)) {
                    using (SQLiteDataReader dr = cmd.ExecuteReader()) {
                        if ((dr.HasRows && operation == UserOperations.INSERT) |
                           (!dr.HasRows && operation == UserOperations.DELETE)) {
                            throw new Exception("Invalid operation!");
                        }
                        dr.Close();
                        cmd.CommandText = operation == UserOperations.DELETE ? deleteStr : insertStr;
                    }
                    cmd.ExecuteNonQuery();
                }
            }
        }
    }
    public enum UserOperations {
        INSERT, 
        DELETE
    }
}
Это файлы из какого-то проекта, тут много лишнего, но принцип думаю понятен
1
0 / 0 / 1
Регистрация: 27.09.2015
Сообщений: 121
28.02.2016, 18:11  [ТС]
insite2012, спасибо за пример!

Такой список ведь может быть источником данных комбобокса?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
28.02.2016, 18:14
Цитата Сообщение от Green01 Посмотреть сообщение
Такой список ведь может быть источником данных комбобокса?
Может. Но вам надо будет переопределить метод ToString() вашего объекта.
Примерно так:
C#
1
2
3
public override string ToString(){
    return string.Format("Name: {0}, Age: {1}", Name, Age);
}
0
0 / 0 / 1
Регистрация: 27.09.2015
Сообщений: 121
28.02.2016, 18:18  [ТС]
insite2012, извините, а что дает такое переопределение ToString?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
28.02.2016, 18:20
Цитата Сообщение от Green01 Посмотреть сообщение
что дает такое переопределение ToString?
Меняет строковое представление объекта. А для более понимания вы попробуйте сначала без него поместить лист с объектами в комбик, а потом с ним. Сами все поймете.
0
0 / 0 / 1
Регистрация: 27.09.2015
Сообщений: 121
28.02.2016, 18:43  [ТС]
insite2012, сейчас попробую

Добавлено через 21 минуту
еще вопрос, наверно, глупый можно ли такой список создавать и помещать его комбобокс в событии Form_Load?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
28.02.2016, 18:44
Цитата Сообщение от Green01 Посмотреть сообщение
можно ли такой список создавать и помещать его комбобокс в событии Form_Load?
Почему же нет.
0
0 / 0 / 1
Регистрация: 27.09.2015
Сообщений: 121
28.02.2016, 21:09  [ТС]
insite2012, посмотрите пожалуйста, что у меня получилось! List должен стать источником комбобокса, но комбобокс все равно пустой, что может быть неправильно?

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
public class Country
        {
            public int id;
            public string name;
            public override string ToString()
            {
                return string.Format("name_country", name);
            }
 
 
        }
 
public void Select(string lst)
        {
            SqlConnection sqlConnection1 = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|TuristicheskoeAgentstvo.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
            sqlConnection1.Open();
            SqlCommand sqlCommand2 = new SqlCommand();
            sqlCommand2.Connection = sqlConnection1;
            sqlCommand2.CommandText = @"SELECT  [Country].id_country, [Country].name_country FROM Country";
            sqlCommand2.Connection = sqlConnection1;
            List<Country> countryes = new List<Country>();
            {
                SqlDataReader dr = sqlCommand2.ExecuteReader();
                while (dr.Read())
                {
                    Country coun = new Country
                    {
                        id = int.Parse(dr["id_country"].ToString()),
                        name = (dr["name_country"].ToString())
                    };
                }
            }
            sqlConnection1.Close();
            comboBox1.DataSource = countryes;
            comboBox1.DisplayMember = "name";
            comboBox1.ValueMember = "id";
        }
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
28.02.2016, 21:47
Цитата Сообщение от Green01 Посмотреть сообщение
комбобокс все равно пустой, что может быть неправильно?
Естественно. Вы внутри цикла while() создаете объект и заполняете его, а в лист не добавляете. Вот лист у вас и пустой (и комбик тоже).
После строки 30 добавьте:
countryes.Add(coun);
0
0 / 0 / 1
Регистрация: 27.09.2015
Сообщений: 121
28.02.2016, 21:49  [ТС]
а я уже добавила эту строку) но все равно пустой
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
28.02.2016, 21:52
Цитата Сообщение от Green01 Посмотреть сообщение
я уже добавила эту строку
Тогда и вот эту так измените.
sqlCommand2.CommandText = @"SELECT * FROM Country";
0
0 / 0 / 1
Регистрация: 27.09.2015
Сообщений: 121
28.02.2016, 22:01  [ТС]
к сожалению, тоже самое
и вот тут еще добавила:
C#
1
2
3
4
5
6
7
8
9
10
11
public class Country
        {
            public int id {get; set;}
            public string name {get; set;}
            public override string ToString()
            {
                return string.Format("id: {0}, name: {1}", id, name);
            }
 
 
        }
но тоже не помогло

Добавлено через 3 минуты
но ведь должно же быть какое-то решение проблемы
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
28.02.2016, 22:11
Цитата Сообщение от Green01 Посмотреть сообщение
ведь должно же быть какое-то решение проблемы
Проблема в вашем коде. Или нет таких записей в БД.
Вот такой простой тест все выводит, как и предполагается. Можете проверить.
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication5 {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
            List<Country> countries = new List<Country> {
                new Country{ID=0, Name="One"},
                new Country{ID=1, Name="Two"},
                new Country{ID=2, Name="Three"}
            };
 
            comboBox1.DataSource = countries;
        }
    }
    public class Country {
        public int ID { get; set; }
        public string Name { get; set; }
        public override string ToString() {
            return string.Format("ID: {0}, Name: {1}", ID, Name);
        }
    }
}
Добавлено через 2 минуты
Green01, закомментируйте строки 35 и 36. И посмотрите на результат.
1
0 / 0 / 1
Регистрация: 27.09.2015
Сообщений: 121
28.02.2016, 22:27  [ТС]
insite2012, да так появляются значения, но в виде:
ID=0, Name="One"
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
28.02.2016, 22:38
Цитата Сообщение от Green01 Посмотреть сообщение
так появляются значения, но в виде:
ID=0, Name="One"
А как должны?
0
0 / 0 / 1
Регистрация: 27.09.2015
Сообщений: 121
28.02.2016, 22:39  [ТС]
insite2012, получилось вывести в комбобокс, просто перенесла код в Form_Load. Большое спасибо за ответы! Очень мне помогли!
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
28.02.2016, 22:41
Цитата Сообщение от Green01 Посмотреть сообщение
Большое спасибо за ответы!
На здоровье.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.02.2016, 22:41
Помогаю со студенческими работами здесь

Как результат запроса поместить в массив
В Delphi при подключении к Oracle писал такой код: with Query1 do begin SQL.Clear; SQL.Add('SELECT P1, P2,...

Как преобразовать результат запроса в IQueryable в List?
Здравствуйте! Подскажите пожалуйста, как исправить код моего метода по выборке нескольких столбцов из связанных таблиц базы данных MS...

Как получиль результат SQL запроса?
простейший запрос select * from Table where name='Андрей'т.е. вообще существует такая запись.

Как получить результат SQL запроса?
простейший запрос select * from Table where name='Андрей'т.е. вообще существует такая запись.

Поместить результат запроса в edit
Всем привет! Имеется таблица tovar c полем nazenka (тип int). Как сделать с помощью запроса так, чтобы в edit поле отражалась средняя...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru