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

Автодополнение textbox из БД MS SQL

01.04.2018, 11:23. Показов 1853. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Помогите сделать автодополнение textbox данными из БД. Есть две таблице которые связаны друг с другом по ID. нужно сделать так, что бы вводя запись в textbox запись сохранялась в первой таблице и ей присваивался ID и если будут повторы в записях, то ID уже не присваивался.
Есть код, может его можно как-то переделать?
C#
1
2
3
4
5
6
7
8
9
10
11
AutoCompleteStringCollection source = new AutoCompleteStringCollection() 
        { 
            "Кузнецов", 
            "Иванов", 
            "Петров", 
            "Кустов"
        };
            textBox7.AutoCompleteCustomSource = source;
            textBox7.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
            textBox7.AutoCompleteSource = AutoCompleteSource.CustomSource;            
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.04.2018, 11:23
Ответы с готовыми решениями:

Реализовать автодополнение для TextBox
Доброе время суток! Есть textbox для ввода данных. Часть данных нужно выбирать( названия ), а часть набирать(значения) Хочу чтобы по...

Из TextBox в БД SQL
Доброго всем времени суток. Встала проблема, в инетрнете много всего написано, походу перечитала и каша в голове. Помогите справиться...

sql запрос и textbox
Всем привет . Не могу разобраться , помогите. Вот кусок кода textBox5.DataBindings.Add(new Binding("Text", Bvagon,...

18
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 21
11.04.2018, 16:43  [ТС]
Все сделала это так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SqlCommand myCommand = conn.CreateCommand();             
            myCommand.CommandText = "SELECT Stst FROM Vid_Nar";             
            SqlDataReader dataReader = myCommand.ExecuteReader();
            AutoCompleteStringCollection s = new AutoCompleteStringCollection();             
            while (dataReader.Read())             
            {                 
                s.Add( (string)dataReader["Stst"] );             
            }             
            dataReader.Close();             
            conn.Close();             
                    
            textBox7.AutoCompleteCustomSource = s;
            textBox7.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
            textBox7.AutoCompleteSource = AutoCompleteSource.CustomSource;
теперь не могу как сделать обработчик ошибок на повторное введение записи. т.е. при введение такой же записи как и ранее она сохраняется как новая, как можно это описать??
На данный момент у меня записи сохраняются так
C#
1
2
3
4
5
6
SqlConnection conn = new SqlConnection(ConnectionString);
                        conn.Open();
                        SqlCommand myCommand = conn.CreateCommand();
                        myCommand.CommandText = "INSERT INTO Vid_Nar (Stst) values ('" + textBox7.Text + "')";
                        myCommand.ExecuteNonQuery();
                        conn.Close();
0
 Аватар для XIST
1961 / 1071 / 148
Регистрация: 01.10.2009
Сообщений: 3,605
Записей в блоге: 1
11.04.2018, 21:36
Olesya1, делать запрос на наличие такой записи и возвращать булевое значение, если FALSE то выполнять запрос
1
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 21
17.04.2018, 12:41  [ТС]
я сделала так, но при выполнение запроса пишет что не получается тип nvarchar преобразовать в int.
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
if (textBox7.Text != "")
                {                    
                    SqlConnection con = new SqlConnection(@"Data Source=LEX-PEX\SQLEXPRESS;Initial Catalog=GIBDD;Integrated Security=True");
                    con.Open();
                    SqlCommand cmd = con.CreateCommand();
                    cmd.CommandText = "Select * from Vid_Nar where Stst =" + textBox7.Text;
                    SqlDataReader dr = cmd.ExecuteReader();
                   
                    if (dr.Read() == false)
                    {
                        if (MessageBox.Show("Введена новая статья.\nЕсли вы хотите сохранить эту статью, то нажмите Да", "Сохранение", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk) == DialogResult.No)
                        { }
                        else
                        {
 
                            SqlConnection conn = new SqlConnection(ConnectionString);
                            conn.Open();
                            SqlCommand myCommand = conn.CreateCommand();
                            myCommand.CommandText = "INSERT INTO Vid_Nar (Stst) values ('" + textBox7.Text + "')";
                            myCommand.ExecuteNonQuery();
                            conn.Close();
                        }
                    }
                    else
                    {
                        
                    }
                    dr.Close();
                    con.Close();
                }
                else { }
0
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
17.04.2018, 13:09
в 19 строке укажите колонку, в которую нужно записать текст.
П.С. - своим кодом даёте возможность удалить всю информацию в своей БД. не делайте конкатенаций - пишите параметры.
0
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 21
17.04.2018, 13:36  [ТС]
Цитата Сообщение от hoolygan Посмотреть сообщение
в 19 строке укажите колонку, в которую нужно записать текст.
П.С. - своим кодом даёте возможность удалить всю информацию в своей БД. не делайте конкатенаций - пишите параметры.
вот так?
C#
1
myCommand.CommandText = "INSERT INTO Vid_Nar (ID, Stst) values ({'1'}, '" + textBox7.Text + "')";
0
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
17.04.2018, 15:00
Почти, начинаете догадываться .
В конструкции Update указываются колонки, куда будет производиться запись, а также - что именно будет записываться.
У Вас сейчас указано 2 колонки - и только 1-но значение - как сервер должен это воспринять? - никак - будет отлуп и ошибка.
Также стоить погуглить про параметризированные запросы - даже тут на форуме каждая 3-я тема содержит об этом сведения.
0
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 21
18.04.2018, 07:15  [ТС]
Цитата Сообщение от hoolygan Посмотреть сообщение
Почти, начинаете догадываться .
В конструкции Update указываются колонки, куда будет производиться запись, а также - что именно будет записываться.
У Вас сейчас указано 2 колонки - и только 1-но значение - как сервер должен это воспринять? - никак - будет отлуп и ошибка.
Также стоить погуглить про параметризированные запросы - даже тут на форуме каждая 3-я тема содержит об этом сведения.
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
if (textBox7.Text != "")
                {                    
                    SqlConnection con = new SqlConnection(@"Data Source=LEX-PEX\SQLEXPRESS;Initial Catalog=GIBDD;Integrated Security=True");
                    con.Open();
                    SqlCommand cmd = con.CreateCommand();
                    cmd.CommandText = "Select * from Vid_Nar where Stst =" + textBox7.Text;
                    SqlDataReader dr = cmd.ExecuteReader();
                    if (dr.Read() == false)
                    {
                        if (MessageBox.Show("Введена новая статья.\nЕсли вы хотите сохранить эту статью, то нажмите Да", "Сохранение", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk) == DialogResult.No)
                        { }
                        else
                        {
                            cmd.CommandText = "INSERT INTO Vid_Nar (Stst) values ({'2'},'" + textBox7.Text + "')";
                            cmd.ExecuteNonQuery();
                            con.Close();
                        }
                    }
                    else
                    {
                        
                    }
                        dr.Close();
                        con.Close();
                }
Ругается на эти две строчки
C#
1
2
SqlDataReader dr = cmd.ExecuteReader();//ошибка при введении букв
if (dr.Read() == false)//ошибка при введении точки и чисел
Миниатюры
Автодополнение textbox из БД MS SQL   Автодополнение textbox из БД MS SQL   Автодополнение textbox из БД MS SQL  

0
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 21
18.04.2018, 07:26  [ТС]
Цитата Сообщение от XIST Посмотреть сообщение
Olesya1, делать запрос на наличие такой записи и возвращать булевое значение, если FALSE то выполнять запрос
Я в ДБ наложила ограничение на добавление повторяющихся записей. не понимаю почему ошибки выскакивают??
C#
1
2
3
4
5
6
7
8
9
10
11
if (MessageBox.Show("Введена новая статья.\nЕсли вы хотите сохранить эту статью, то нажмите Да", "Сохранение", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk) == DialogResult.No)
                        { }
                        else
                        {
                            SqlConnection conn = new SqlConnection(ConnectionString);
                            conn.Open();
                            SqlCommand myCommand = conn.CreateCommand();
                            myCommand.CommandText = "INSERT INTO Vid_Nar (Stst) values ('" + textBox7.Text + "')";
                            myCommand.ExecuteNonQuery();
                            conn.Close();
                        }
С этим кодом все было хорошо и данные сохранялись, только не было проверки на повтор, по этому каждую статью программа предлагала сохранить как новую
0
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
18.04.2018, 08:21
Olesya1, 1. Если работает - то это никак не значит, что код красивый, и, главное - безопасный. Нужно использовать параметры, а не конкатенировать строки.
2. Нужно подучить хоть немножко синтаксис SQL и открыть для себя конструкцию if not exists()
После этого можно добавлять записи только новые.
Работать с костылями не стоит.
1
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 21
18.04.2018, 16:56  [ТС]
Цитата Сообщение от hoolygan Посмотреть сообщение
Olesya1, 1. Если работает - то это никак не значит, что код красивый, и, главное - безопасный. Нужно использовать параметры, а не конкатенировать строки.
2. Нужно подучить хоть немножко синтаксис SQL и открыть для себя конструкцию if not exists()
После этого можно добавлять записи только новые.
Работать с костылями не стоит.
она пишется в SQL или в коде??? если в SQL то у меня там уже стоит ограничение и она не дает сохранение повторных записей
0
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
18.04.2018, 20:19
В сиквеле пишется.
Ограничение даст отлуп и вернет ошибку, а вот условие - просто вернет нормальный ответ. Разница огромная в этом. Лучше использовать и то и другое.
1
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 21
19.04.2018, 09:03  [ТС]
Цитата Сообщение от hoolygan Посмотреть сообщение
В сиквеле пишется.
Ограничение даст отлуп и вернет ошибку, а вот условие - просто вернет нормальный ответ. Разница огромная в этом. Лучше использовать и то и другое.
все работает. Все дело в скобочках.
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
if (textBox7.Text != "")
                {
                    SqlConnection con = new SqlConnection(@"Data Source=LEX-PEX\SQLEXPRESS;Initial Catalog=GIBDD;Integrated Security=True");
                    con.Open();
                    SqlCommand cmd = con.CreateCommand();
                    cmd.CommandText = "Select * from Vid_Nar where Stst =('" + textBox7.Text + "')";
                    SqlDataReader dr = cmd.ExecuteReader();
                    if (dr.Read() == false)
                    {
                        if (MessageBox.Show("Введена новая статья.\nЕсли вы хотите сохранить эту статью, то нажмите Да", "Сохранение", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk) == DialogResult.No)
                        { }
                        else
                        {
                            dr.Close();
                            cmd.CommandText = "INSERT INTO Vid_Nar (Stst) values ('" + textBox7.Text + "')";
                            cmd.ExecuteNonQuery();
                            
                        }
                    }
                    else
                    {
                        
                    }
                      con.Close();
                }
0
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
19.04.2018, 09:12
Ну такое. Я такой код обычно называю костылем. Работать будет, но в продакшн такое бы не запихнул, если честно.
0
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
19.04.2018, 11:00
Цитата Сообщение от hoolygan Посмотреть сообщение
if not exists()
это еще зачем? в DML if?
0
Эксперт .NET
 Аватар для Usaga
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,425
19.04.2018, 12:19
Цитата Сообщение от pincet Посмотреть сообщение
это еще зачем?
Чтобы сделать проверку перед добавлением. В одной транзакции.
0
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
19.04.2018, 13:02
insert select чем не угодил?
0
Эксперт .NET
 Аватар для Usaga
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,425
19.04.2018, 18:10
pincet, это немного не о том, не находите?
0
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
19.04.2018, 19:57
Если честно, не совсем. Вопрос стоял в том, чтобы не добавить запись с неким ключом, уже существующим. Кто мешает в select для insert сделать not exists?
Ну, или я в самом деле не вник в топик. Такое тоже случается
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.04.2018, 19:57
Помогаю со студенческими работами здесь

Sql запрос и textBox
Здравствуйте, уважаемые форумчане. Создаю sql-запрос в конструкторе запросов в среде Visual Studio 2008 C++, выглядит он следующим...

Перенос sql запроса в textbox
Добрый день! у меня возникла проблема, никак не получается решить. Мне нужно по нажатию строки dataGridView переносить результат запроса в...

Добавить запись с textbox в БД SQL
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...

SQL подключение через textbox
Если делать так Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If...

Сравнение цифр TextBox с БД SQL на C#
как правильно написать код у меня программа связана с БД SQL Server ( и в базе есть таблица "КЛЮЧ" с двумя столбцами ID и Ключ)...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru