通过Combobox和SQL数据库表填充文本框

时间:2014-12-03 19:03:38

标签: mysql vb.net combobox

我正在尝试从表单上的组合框填充一组文本框。在加载表单时,使用数据集填充组合框。当它被加载时,它需要在kitcombobox中显示每个单元号只有一个条目(这是一个包含多件设备的套件的单元号),但是在单元中显示多个设备的信息在不同的文本框中通过kitcombobox选择数字。我应该采取什么方法?我真的迷路了,这就是我到目前为止所做的一切:(

 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

1 个答案:

答案 0 :(得分: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

您当前构建查询的方式(通过直接从用户输入连接字符串参数)导致大多数数据库系统的性能不佳,而且是一个巨大的安全漏洞。查找SQL注入以获取更多详细信息(或阅读这些two questions)。

更好的数据库代码可能看起来像这样:

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