开发者

how to get data to textbox from the database

I have a form with one combo box and text box, and an SQL database name开发者_如何学God balance with two columns; one as customername and the other as obbalance. I had bound all of the customer name to the combo box, now what I have to do is, when a user selects a customer name from the combo box, the text box should show the obbalance of the selected customername; here, the customer name will not be repeated - only one name per customer. What can I do? Please help me.

Dim conectionstring As String
    conectionstring = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\SHOPPROJECT\SHOPPROJECT\shop.mdf;Integrated Security=True;User Instance=True"


    Dim ST As String = ComboBox1.SelectedText

    Dim sqlcon As New SqlConnection(conectionstring)

    Dim sqlcmd As New SqlCommand("SELECT OBBALANCE FROM BALANCE WHERE CUSTOMERNAME =  " & " '" & ST & "'" & "", sqlcon)
    MessageBox.Show(TextBox1.Text)


    Dim result As Object

    Try
        sqlcon.Open()
        ' Dim sdr As SqlDataReader = sqlcmd.ExecuteReader()
        result = sqlcmd.ExecuteScalar()

        If result IsNot Nothing Then
            TextBox1.Text = result.ToString()
            MessageBox.Show(TextBox1.Text)

        End If

    Catch ex As SqlException
        MessageBox.Show(ex.Message)

    End Try
End Sub

I've tried this, but I can't see the value in the text box, and obbalance is a floating-point value from the SQL database.


If you're updating a text box, is this a single result (scalar value)? If so, the first thing I'd do is use ExecuteScalar not ExecuteReader. Then, use debug mode with breakpoints to get a better idea of what is actually happening. It may simply be that you're not getting any results.

Note: I'm assuming the bad coding practice (in-line sql statement, hard-coded connection string, etc.) are for clarity. If they're not, fix them.


Make the follwing changes:

Dim sqlcmd As New SqlCommand("SELECT OBBALANCE FROM BALANCE WHERE CUSTOMERNAME = '" & ST & "'", sqlcon)


TextBox1.Text = sdr.GetString(yourColumnIndex) 

ComboBox1.SelectedText returns the highlighted (selected) text on the ComboBoxControl. That will be empty if you haven't use your mouse to select a portion of its text or hold the shift while you are pressing the direction keys on your keyboard. And that's probably why your query returns ZERO RECORDS.

Use the following instead:

Dim ST As String = ComboBox1.SelectedItem.Text 


Set a breakpoint and ensure you are getting the value for OBBALANCE (see if you are getting any rows period might be good). Also, make sure you can only get one row, as you are iterating forward, even when you only need one value.

Better yet, consider ExecuteScalar, which only returns a single value. While you are at it, parameterize the SQL query so you don't get SQL injected.

UPDATE: Just change it here:

sdr = sqlcmd.ExecuteReader()

to something like

Dim s as String = sqlcmd.ExecuteScalar()

Then use s as your textbox value. You may have to ToString() the value or otherwise cast as string, as I believe the ExecuteScalar() returns an object.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜