Автозаполнение текста в текстовом поле

Каждый раз, когда я ввожу символ в текстовое поле, в текстовом поле должны быть предложения по именам, которые начинаются с буквы, введенной пользователем. Я предоставлю изображение ошибки, возникающей при попытке запустить программу

private void View_Load(object sender, EventArgs e)
{
    string maincon = ConfigurationManager.ConnectionStrings["dbcs"].ConnectionString;
    SqlConnection con = new SqlConnection(maincon);
    string sqlquery = "select firstname from [dbo].[tbl_registerStudent]";
    SqlCommand sqlcom = new SqlCommand(sqlquery, con);
    con.Open();
    SqlDataReader sdr = sqlcom.ExecuteReader();
    AutoCompleteStringCollection autotext = new AutoCompleteStringCollection();
    while (sdr.Read())
    {
        autotext.Add(sdr.GetString(0));
        textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
        textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
        textBox1.AutoCompleteCustomSource = autotext;
        con.Close();
    }
}

Вы не должны закрывать соединение внутри цикла while (sdr.read()) - переместите его за пределы цикла

Quercus 15.12.2020 08:15

это так неправильно

phonemyatt 15.12.2020 08:16

Привет @tbhaxor, я постараюсь прочитать этот вопрос, чтобы узнать, ответит ли он на мой вопрос. Спасибо за рекомендацию!

William Gar 15.12.2020 08:22

Привет @Quercus, спасибо за небольшой совет. Очень ценю!

William Gar 15.12.2020 08:23

Не Close вручную, а завернуть в using

Dmitry Bychenko 15.12.2020 09:12
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
92
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Переместить con.Close() из while петли.

while (sdr.Read())
{
    autotext.Add(sdr.GetString(0));
}
con.Close();
textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
textBox1.AutoCompleteCustomSource = autotext;

Спасибо @ user2250152, это решило мой ответ!

William Gar 15.12.2020 08:23

О да, спасибо за это. Я новичок, поэтому не знаю, как отметить, что кто-то ответил на мой вопрос. Еще раз, спасибо

William Gar 15.12.2020 08:34

Я думаю, что только самая первая строка должна быть внутри цикла, остальные можно вынести за его пределы.

Martheen 15.12.2020 08:57

Не Close вручную, а оберните IDisposable в using. Или

private void View_Load(object sender, EventArgs e) {
  AutoCompleteStringCollection autotext = new AutoCompleteStringCollection();

  string maincon = ConfigurationManager.ConnectionStrings["dbcs"].ConnectionString;

  using (SqlConnection con = new SqlConnection(maincon)) {
    con.Open();
 
    string sqlquery = 
      @"select firstname 
          from [dbo].[tbl_registerStudent]";
    
    using(SqlCommand sqlcom = new SqlCommand(sqlquery, con)) {
      using (SqlDataReader sdr = sqlcom.ExecuteReader()) {
        while (sdr.Read())
          autotext.Add(sdr.GetString(0));
      }  
    }
  }

  textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
  textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
  textBox1.AutoCompleteCustomSource = autotext;
}

Или, начиная с c# 8.0, вы можете избавиться от надоедливых {...}:

private void View_Load(object sender, EventArgs e) {
  string maincon = ConfigurationManager.ConnectionStrings["dbcs"].ConnectionString;
 
  using SqlConnection con = new SqlConnection(maincon);
  
  con.Open();
 
  string sqlquery = 
    @"select firstname 
        from [dbo].[tbl_registerStudent]";
    
  using SqlCommand sqlcom = new SqlCommand(sqlquery, con);
  using SqlDataReader sdr = sqlcom.ExecuteReader();

  AutoCompleteStringCollection autotext = new AutoCompleteStringCollection();

  while (sdr.Read())
    autotext.Add(sdr.GetString(0));

  textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
  textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
  textBox1.AutoCompleteCustomSource = autotext;
}

Другие вопросы по теме