我有一个表单,一个组合框和文本框,和一个SQL数据库命名为balance
,有两列;一个是customername
,一个是obbalance
。我已经将所有客户名绑定到组合框,现在我要做的是,当用户从组合框中选择客户名称时,文本框应显示所选customername
的余额;在这里,客户名称不会重复-每个客户只有一个名称。我能做什么?请帮帮我。
Dim conectionstring As String
conectionstring = "Data Source=.SQLEXPRESS;AttachDbFilename=C:Documents and SettingsAdministratorMy DocumentsVisual Studio 2005ProjectsSHOPPROJECTSHOPPROJECTshop.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
我试过了,但是我看不到文本框中的值,obbalance是SQL数据库中的浮点值。
如果你正在更新一个文本框,这是一个单一的结果(标量值)吗?如果是这样,我要做的第一件事是使用ExecuteScalar而不是ExecuteReader。然后,使用带有断点的调试模式,以便更好地了解实际发生的情况。这可能只是因为你没有得到任何结果。
注意:我假设糟糕的编码实践(内联sql语句,硬编码连接字符串等)是为了清晰。
做以下修改:
Dim sqlcmd As New SqlCommand("SELECT OBBALANCE FROM BALANCE WHERE CUSTOMERNAME = '" & ST & "'", sqlcon)
TextBox1.Text = sdr.GetString(yourColumnIndex)
ComboBox1.SelectedText
返回ComboBoxControl
上高亮显示的(选定的)文本。如果您没有使用鼠标选择其文本的一部分,或者在按键盘上的方向键时按住shift键,则该选项将为空。这可能就是为什么您的查询返回ZERO RECORDS。
请使用以下语句:
Dim ST As String = ComboBox1.SelectedItem.Text
设置一个断点,并确保获得OBBALANCE的值(查看是否获得任何行周期可能是好的)。另外,在向前迭代时,即使只需要一个值,也要确保只能获得一行。
更好的方法是考虑ExecuteScalar,它只返回一个值。当你使用它时,参数化SQL查询,这样你就不会被注入SQL。
更新:只需在这里更改:
sdr = sqlcmd.ExecuteReader()
变成
Dim s as String = sqlcmd.ExecuteScalar()
然后使用s作为文本框值。您可能必须ToString()值或以其他方式强制转换为字符串,因为我相信ExecuteScalar()返回一个对象。