Search code examples
sqlvb.netsqlitecomboboxtextbox

How to load data from an SQLite Database query into a textbox?


So I'm making a rota system for a project and I need a textbox to output the contracted hours of the employee that the user currently has selected in the combo box. The problem is, I have no idea how to go about it;

    Sub GetContractedHours()

    Dim sSql As String
    Dim newds As New DataSet
    Dim newdt As New DataTable

    sSql = "SELECT emp_contractedhours FROM Employee WHERE emp_fn ='" & cboEmpName.Text & "%'"

    Dim con As New SQLiteConnection(ConnectionString)
    Dim cmd As New SQLiteCommand(sSql, con)
    con.Open()
    Dim da As New SQLiteDataAdapter(cmd)
    da.Fill(newds, "Employee")
    newdt = newds.Tables(0)

    txtUserAlertHours.DataSource = newdt
    con.Close()

End Sub

Please help! :)


Solution

  • You don't need any of that code. Just get all the data in the first place and then bind your ComboBox and your TextBox, e.g.

    Dim table As New DataTable
    Dim conection As New SQLiteConnection(ConnectionString)
    Dim adapter As New SQLiteDataAdapter("SELECT emp_fn, emp_contractedhours FROM Employee", connection)
    
    adapter.Fill(table)
    
    cboEmpName.DisplayMember = "emp_fn"
    cboEmpName.DataSource = table
    
    txtUserAlertHours.DataBindings.Add("Text", table, "emp_contractedhours")
    

    The TextBox will then be automatically populated when you make a selection in the ComboBox. That's how data-binding works.

    If you do want to query the database each time then you shouldn't use a data adapter at all. You're only retrieving one value and that's exactly what ExecuteScalar is for. Create a command with the appropriate SQL, call ExecuteScalar and assign the result to the Text of your TextBox.

    If you really did want to use data-binding with the code you have (which would be silly) then you can bind just as I have demonstrated above. Just note that, if you're going to use a different DataTable each time, you need to remove the old binding first. You can do that most easily by calling Clear on the DataBindings collection, assuming you have not bound any other properties.