установить автозаполнение в текстовое поле

У меня есть текстовое поле (named textbox1) в приложении формы Windows. У меня есть база данных с именем nn.sdf, и я хочу использовать это как источник автозаполнения. Когда пользователь вводит ввод в текстовое поле 1, он будет показывать предложение от база данных, соответствующая входному тексту, предоставленному пользователем. Так что я поместил свой код в код textBox1_TextChanged property.my:

 private void textBox1_TextChanged(object sender, EventArgs e)
    {
        AutoCompleteStringCollection namesCollection = new AutoCompleteStringCollection();
        SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Users\Imon-Bayazid\Documents\nn.sdf");
        con.Open();
        SqlCeCommand cmnd = con.CreateCommand();
        cmnd.CommandType = CommandType.Text;
        cmnd.CommandText = "SELECT top(10)  english FROM dic";        
        SqlCeDataReader dReader;
        dReader = cmnd.ExecuteReader();

        if (dReader.Read())
        {
            while (dReader.Read())
                namesCollection.Add(dReader["english"].ToString());
        }
        else
        {
            MessageBox.Show("Data not found");
        }
        dReader.Close();

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

Но он показывает только первые 10 данных. Я знаю, что у меня проблема в строке

  cmnd.CommandText = "SELECT top(10)  english FROM dic";// english is my column name and dic is my table name   

Я не знаю, что должно быть cmnd.CommandText.I хочу автозапуском всякий раз, когда пользователь вводит что-либо в текстовое поле1. Как я могу это сделать???

1
nl ja de

1 ответы

Как вы знаете, CommandText должен (или может) быть оператором SQL. Попробуйте следующее

int fetchAmount = 10;
string userInput = "abc";
cmnd.CommandText = string.Format("SELECT top ({0}) english FROM dic WHERE english like '{1}%'",
    fetchAmount.ToString(), userInput);

LIKE is an SQL command that compares text. So in your case, you want all results where the text starts with what the user has typed in.

Теперь, прежде чем кто-то попадет на мое дело, я знаю, что это не лучший способ сделать это. Ввод значений непосредственно в оператор SQL оставляет вас широко открытыми для SQL Injection. Я бы предложил вам научиться и реализовать хранимые процедуры для любых взаимодействий с базой данных.

1
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot