2014-12-03 62 views
0

我想從窗體上的組合框填充一組文本框。當窗體加載時,使用數據集填充組合框。當它被加載時,它需要在kitcombobox中顯示每個單元編號只有一個條目(這是一個包含多件設備的工具包的單元編號),但當單元顯示在不同的文本框中時,會顯示多件設備的信息數字通過kitcombobox選擇。我應該採取什麼方法?我真的失去了,這是我迄今爲止:(通過Combobox和SQL數據庫表填充文本框

Private Sub ckunit() 
    Dim ds As New DataSet 
    Dim cs As String = My.Settings.MacroQualityConnectionString 
    Dim kitcombobox As String = "SELECT DISTINCT Unit_Number, Status FROM Calibrated_Equipment WHERE CHARINDEX('CK', Unit_Number) > 0 AND Status='" & ckstatuscombbx.Text & "'" 
    Dim sqlconnect As New SqlConnection(cs) 
    Dim da As New SqlDataAdapter(kitcombobox, sqlconnect) 

    sqlconnect.Open() 
    da.Fill(ds, "Calibrated_Equipment") 

    sqlconnect.Close() 

    kitcombbx.DataSource = ds.Tables(0) 
End Sub 

回答

0

假設你正在使用的WinForms,我認爲主要將在kitcombbx增加對SelectionChangedCommitted事件的事件處理程序。

你然後可以檢查屬性的組合框,檢查所選內容,並運行另一個查詢拉設備信息爲包它可能會是這個樣子:

Private Sub kitcombbx_SelectionChangeCommitted(sender As Object, e As EventArgs) _ 
    Handles kitcombbx.SelectionChangeCommitted 

    Dim kit = kitcombbx.SelectedItem.ToString() 
    Dim kitEquipment = FetchKitEquipmentInformation(kit) 
    PopulateEquipmentInformation(kitEquipment) 
End Sub 

您當前正在構建您的查詢方式(通過conca直接從用戶輸入中提取字符串參數)導致大多數數據庫系統的性能不佳,而且,這是一個巨大的安全漏洞。查看SQL注入瞭解更多細節(或閱讀這些twoquestions)。

更好的DB的代碼可能是這個樣子:

Dim query = New StringBuilder() 
query.AppendLine("SELECT DISTINCT Unit_Number, Status  ") 
query.AppendLine("FROM Calibrated_Equipment    ") 
query.AppendLine("WHERE CHARINDEX('CK', Unit_Number) > 0 ") 
query.AppendLine("  AND Status = @STATUS    ") 

Dim connection As New SqlConnection(My.Settings.MacroQualityConnectionString) 
Dim command As New SqlCommand(query, connection); 
command.Parameters.Add("@STATUS", ckstatuscombbx.Text); 

Dim da As New SqlDataAdapter(kitcombobox, sqlconnect) 
'And so on... 

你的問題有些寬泛(因此,有可能偏離主題的StackOverflow的),看How to Ask

+1

非常感謝您,那就是我一直在尋找的東西。我很抱歉,這個問題太廣泛了,我不知道我在找什麼。我一定會讀到SQL注入,所以我可以嘗試在我的SQL中消除。再次感謝 – 2014-12-03 23:40:18