在我的数据库中,有3列,分别是名称,年龄,性别。在程序中,我只想使用1个搜索按钮。单击该按钮时,程序将确定文本框中的哪3个已输入,并搜索正确的数据。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。##。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
您如何处理查询?例如,如果名称和性别包含文本,则查询:
“ Select * from table Where (Name = @name) AND (Gender = @gender)”
Select * from table Where (Name = @name) AND (Gender = @gender)
而且,当仅输入名称时,我仅查询名称。我必须逐个文本框检查是否有用户输入,然后为每个用户写多个查询吗?还是有更好的方法来做到这一点?
编辑(29/5/16):我尝试这样做
myCommand = New MySqlCommand("Select * from project_record Where (FloatNo = @floatNo OR FloatNo = 'None') AND (DevCompanyName = @devCompanyName OR DevCompanyName = 'None') AND (DevType = @devType OR DevType = 'None') AND (LotPt = @lotPt OR LotPt = 'None') AND (Mukim = @mukim OR Mukim = 'None') AND (Daerah = @daerah OR Daerah = 'None') AND (Negeri = @negeri OR Negeri = 'None') AND (TempReference = @tempRef OR TempReference = 'None')", sqlConn)
但是正如您已经猜到的那样,它不能很好地工作,因为如果我仅输入输入内容DevType并将其他文本框保留为空白,则查询将不会仅提取所有记录DevType。它只会显示为无记录。
DevType
(向下滚动以查看更新)
您可以尝试以下方法:
代码如下:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim Predicate1 As String = Me.TextBox1.Text Dim Predicate2 As String = Me.TextBox2.Text Dim Predicate3 As String = Me.TextBox3.Text Dim PredicateList As New List(Of String) Dim WhereClause As String Dim Query As String If Predicate1 <> String.Empty Then PredicateList.Add("Name=""" & Predicate1 & """") End If If Predicate2 <> String.Empty Then PredicateList.Add("Age=""" & Predicate2 & """") End If If Predicate3 <> String.Empty Then PredicateList.Add("Gender=""" & Predicate3 & """") End If WhereClause = String.Join(" AND ", PredicateList.ToArray) Query = "SELECT * FROM TABLE WHERE " & WhereClause MessageBox.Show(Query) End Sub
除了有关SQL注入的注释之外,这是一个更新的示例。
Dim Command As SqlClient.SqlCommand Dim Predicate1 As String = Me.TextBox1.Text Dim Predicate2 As String = Me.TextBox2.Text Dim Predicate3 As String = Me.TextBox2.Text Dim ParameterList As New List(Of SqlClient.SqlParameter) Dim PredicateList As New List(Of String) Dim BaseQuery As String = "SELECT * FROM TABLE WHERE " If Predicate1 <> String.Empty Then PredicateList.Add("name = @name") ParameterList.Add(New SqlClient.SqlParameter("@name", Predicate1)) End If If Predicate2 <> String.Empty Then PredicateList.Add("age = @age") ParameterList.Add(New SqlClient.SqlParameter("@age", Predicate2)) End If If Predicate3 <> String.Empty Then PredicateList.Add("gender = @gender") ParameterList.Add(New SqlClient.SqlParameter("@gender", Predicate3)) End If Command = New SqlClient.SqlCommand(BaseQuery & String.Join(" AND ", PredicateList.ToArray)) Command.Parameters.AddRange(ParameterList.ToArray)