Каждый раз, когда я ввожу символ в текстовое поле, в текстовом поле должны быть предложения по именам, которые начинаются с буквы, введенной пользователем. Я предоставлю изображение ошибки, возникающей при попытке запустить программу
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())
- переместите его за пределы цикла
это так неправильно
Привет @tbhaxor, я постараюсь прочитать этот вопрос, чтобы узнать, ответит ли он на мой вопрос. Спасибо за рекомендацию!
Привет @Quercus, спасибо за небольшой совет. Очень ценю!
Не Close
вручную, а завернуть в using
Переместить 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, это решило мой ответ!
О да, спасибо за это. Я новичок, поэтому не знаю, как отметить, что кто-то ответил на мой вопрос. Еще раз, спасибо
Я думаю, что только самая первая строка должна быть внутри цикла, остальные можно вынести за его пределы.
Не 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;
}
Отвечает ли это на ваш вопрос? Автозаполнение в текстовом поле с использованием данных из базы данных SQL Server