1

Windowsフォームアプリケーションにtextbox(textbox1という名前)があります。nn.sdfという名前のデータベースがあり、これをオートコンプリートのソースとして使用したいと思います。ユーザーがtextbox1に入力すると、データベース、ユーザーが指定した入力テキストと一致します。したがって、コードをtextBox1_TextChangedproperty.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をどうすればよいかわかりません。ユーザーがテキストボックスに何かを入力するたびに、自動提案が必要です1。これどうやってするの???

4

1 に答える 1

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テキストを比較する SQL コマンドです。したがって、あなたの場合、テキストがユーザーが入力したもので始まるすべての結果が必要です。

誰かが私の訴訟を起こす前に、これが最善の方法ではないことを私は知っています. SQL ステートメントに値を直接入力すると、SQL インジェクションの危険にさらされます。データベースとのやり取りを行うには、ストアド プロシージャを学習して実装することを強くお勧めします。

于 2013-02-25T18:21:51.223 に答える