0

WindowsForms 内で検索エンジンを開発しています。VB.Net 2010 と SQL Server 2008 を使用しています。私の接続は ADO.Net です。

テキストボックス、コンボボックス、ラジオボタンを使用してデータベースからレコードを取得するたびに、文字列を連結する際に問題が発生します。

それらのオブジェクトの値に基づいてレコードを取得したいのですが、

Dim Condition1 As String = TextBox1.Text
Dim Condition2 As String = ComboBox1.Text
Dim Condition3  As String = RadioButton.Text

連結しようとすると、演算子 AND.. を使用します。

SELECT * FROM TableName WHERE (Condition1 AND Condition2 AND Conditon3)

一部のオブジェクトに値がない場合、エラーが発生します。

Incorrect syntax near the word AND.
4

1 に答える 1

0

クエリを作成するために文字列を連結しないでください。SQL パラメータを使用してください。投稿したクエリは、 SQL インジェクションの傾向があります。

Dim query as String = "SELECT * FROM TableName WHERE Column1 = @Column1 AND 
                             Column2 = @Column2 AND Column3 = @Column3"
Dim cmd As SqlCommand
cmd.Parameters.AddWithValue("@Column1", textBox1.Text)
cmd.Parameters.AddWithValue("@Column2", comboBox1.Text)
cmd.Parameters.AddWithValue("@Column3", radioButton1.Text)

上記とは別に、連結しようとしている条件は無効です。句の後に来るものはすべて、WHERE上で行ったように列名と値を指定する必要があります。したがって、 condition1 はたとえば次のようになります。

// If the column type is varchar then single quotes must be used
Dim Condition1 As String = String.Format("Name = '{0}'", TextBox1.Text)
于 2013-02-09T20:12:19.510 に答える