2013-05-08 59 views
0

對於我的公司,我必須創建一個客戶數據庫,我通過VB.NET應用程序進行管理。SQL與多個文本框一樣

該應用程序有幾個文本框和一個按鈕來搜索客戶。如果我輸入客戶的名稱,SQL Select語句正在工作並填充我的數據網格。

但我希望能夠輸入客戶的姓名和他住的街道。對此,最佳解決方案是什麼?使用案例?使用了很多If語句?

這裏是我的代碼:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles Button1.Click 
    If True Then 
     Dim Conn As New MySqlConnection 
     Dim da As MySqlDataAdapter 
     Dim ds As New DataSet 
     Dim dt As New DataTable 
     Dim plz As String = plzTextBox.Text 

     Conn.ConnectionString = "server=localhost;uid=root;pwd=;database=wws; " 

     Dim sql As String = String.Empty 
     If vornameTextBox.Text <> String.Empty Then 
      sql = "vorname = " & vornameTextBox.Text.Trim 
     End If 
     If nachnameTextBox.Text <> String.Empty Then 
      AddCondition(sql, "nachname LIKE '%" & nachnameTextBox.Text.Trim & "%'") 
     End If 
     If emailTextBox.Text <> String.Empty Then 
      AddCondition(sql, "email LIKE '%" & emailTextBox.Text.Trim & "%'") 
     End If 
     If plzTextBox.Text <> String.Empty Then 
      AddCondition(sql, "plz LIKE '%" & plzTextBox.Text.Trim & "%'") 
     End If 
     If sql <> String.Empty Then 
      da = New MySqlDataAdapter("SELECT id,vorname,nachname,email,plz,strasse,nummer,stiege,stock,tuer FROM kunden WHERE " + sql, Conn) 

      da.Fill(dt) 

      DataGridView1.DataSource = dt 
     End If 



    Else 
     DataGridView1.ColumnCount = 1 
     DataGridView1.Rows.Add("1") 

    End If 

End Sub 

提前感謝!

+0

您打開[sql-injection](http://msdn.microsoft.com/en-us/library/ms161953(v = sql.105).aspx)。使用['SqlParameter's](http://dev.mysql.com/doc/refman/5.0/es/connector-net-examples-mysqlparameter.html)。 – 2013-05-08 22:13:08

+0

感謝您的提示,將取代它。 – bibz 2013-05-08 22:17:00

回答

0

如果你真的想要避免使用大量if語句,但是你所做的只是將負載分流到你的SQL服務器上,而不是在客戶端上。

這裏的示例是一個可以使用大量if語句或三元運算符來確定如何構建SQL語句,在客戶端上放置非常輕的處理負載的示例,或者您可以插入每個您的字段,後跟一個百分比符號,並用單引號括起來,從而使您的SQL Server評估這些字段的內容,否則,如果該字段爲空,則不會。

查詢計劃優化可能會刪除那些多餘的字段搜索,也許它不會。我在我的手機上輸入了這個信息,因此沒有任何可用的測試。