Vb.net 如何使用组合框更改事件触发代码

Vb.net 如何使用组合框更改事件触发代码,vb.net,oledb,textchanged,lost-focus,Vb.net,Oledb,Textchanged,Lost Focus,我创建了一个包含历史股价的数据库。在我的表格上,我有两个组合框,组合框和日期。当这些组合框被填满时,我想检查数据库,看看数据库中是否存在相应的数据。如果有,我想更改数据库中名为label_的标签的文本 我的问题发生在更改事件中。我希望在更改文本框中的数据后,所有这些都会发生。我已尝试了.TextChanged和.LostFocus事件。“.TextChanged”会将代码提前触发,并在我的SQL命令语句中抛出和出错。“.LostFocus”事件根本不会触发我的代码 这是我目前的代码: Publi

我创建了一个包含历史股价的数据库。在我的表格上,我有两个组合框,组合框和日期。当这些组合框被填满时,我想检查数据库,看看数据库中是否存在相应的数据。如果有,我想更改数据库中名为label_的标签的文本

我的问题发生在更改事件中。我希望在更改文本框中的数据后,所有这些都会发生。我已尝试了.TextChanged和.LostFocus事件。“.TextChanged”会将代码提前触发,并在我的SQL命令语句中抛出和出错。“.LostFocus”事件根本不会触发我的代码

这是我目前的代码:

Public databaseName As String = "G:\Programming\Nordeen Investing 3\NI3 Database.mdb"
Public con As New OleDb.OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source =" & databaseName)
Public tblName As String = "Historical_Stock_Prices"

Private Sub Change_Labels(ByVal sender As Object, ByVal e As EventArgs) Handles ComboBox_Ticker.TextChanged, ComboBox_Date.TextChanged
    con.Close()
    Dim dr As OleDbDataReader
    con.Open()
    If (File.Exists(databaseName)) Then
        Dim restrictions(3) As String
        restrictions(2) = tblName
        Dim dbTbl As DataTable = con.GetSchema("Tables", restrictions)
        If dbTbl.Rows.Count = 0 Then
        Else
            Dim cmd2 As New OleDb.OleDbCommand("SELECT * FROM " & tblName & " WHERE  Ticker = '" & ComboBox_Ticker.Text & "' " & "  AND  Date1 = '" & ComboBox_Date.Text & "'", con)
            dr = cmd2.ExecuteReader
            If dr.Read() = 0 Then
                'If record does not exist
                Label_If_Present.Text = ""
            Else
                Label_If_Present.Text = "In Database"
            End If
            con.Close()
        End If
    Else
    End If
End Sub
我已经在我的项目中的其他形式上成功地实现了这个概念。这个有点不同,我不明白为什么我不能让这个工作

处理TextChanged事件应该有效,但是您需要将DropDownStyle设置为DropDownList,以便Text属性只能是给定值。 然后检查两个组合框是否都选择了值。像这样的方法应该会奏效:

  If ComboBox_Ticker.Text <> "" AndAlso DateTime.TryParse(ComboBox_Date.Text, Nothing) Then

我通常会选择SelectedItemChanged或SelectedIndexChanged或类似的内容。最好在日期标记器中查看带有DateTime.TryParseComboBox\u date.Text的实际日期,而不是任何文本。还应该调查以帮助避免注射攻击。这部分起作用。起初,我甚至无法完成一个组合框。现在我可以填写一个combobox,但只要我在另一个combobox中键入一个内容,错误就会再次出现。它不会等到我在两个组合框中都键入完毕为止。@kwwallpe这是一个错误,我收到System.Data.OleDb.OledBeException类型的未处理异常,该异常发生在System.Data.dll中。其他信息:条件表达式中的数据类型不匹配。我没有意识到您未经验证就允许用户类型信息进入,而不是只允许从下拉列表中进行选择。我修改了我的答案。我假设Combobox\u Ticker只包含文本,如果它也应该被格式化,那么在查询数据库之前,您也必须添加代码来验证它。数据类型不匹配是因为您在查询中使用单引号而不是磅号来包围日期数据类型。访问日期需要用英镑标记,如2013年1月1日。使用参数的另一个原因是:Dim cmd2作为新的OleDb.OleDbCommandSELECT*FROM&tblName&WHERE Ticker=?和Date1=?,con后跟cmd2.Parameters.AddWithValue?,ComboBox_Ticker.Text和cmd2.Parameters.AddWithValue?,ComboBox_Date.Text