我有一个带有一个组合框和文本框的表单,以及一个SQL数据库
名为balance
的列有两列;一个为customername
,另一个为obbalance
。
我已将所有客户名称绑定到组合框,现在我要做的是,
当用户从组合框中选择客户名称时,文本框应显示所选customername
的不平衡;在这里,客户名称不会重复 - 每个客户只有一个名称。
我能做什么?请帮帮我。
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
我试过这个,但是我看不到文本框中的值,而obbalance是SQL数据库中的浮点值。
答案 0 :(得分:1)
设置一个断点并确保获得OBBALANCE的值(看看你是否获得任何行周期可能是好的)。此外,确保只能向前进行一行,即使只需要一个值,也可以获得一行。
更好的是,考虑ExecuteScalar,它只返回一个值。当你在它时,参数化SQL查询,这样你就不会注入SQL。
更新:只需在此更改:
sdr = sqlcmd.ExecuteReader()
类似
Dim s as String = sqlcmd.ExecuteScalar()
然后使用s作为文本框值。您可能必须使用ToString()值或以其他方式转换为字符串,因为我相信ExecuteScalar()返回一个对象。
答案 1 :(得分:1)
进行以下更改:
Dim sqlcmd As New SqlCommand("SELECT OBBALANCE FROM BALANCE WHERE CUSTOMERNAME = '" & ST & "'", sqlcon)
TextBox1.Text = sdr.GetString(yourColumnIndex)
ComboBox1.SelectedText
返回ComboBoxControl
上突出显示的(已选定)文字。如果您在按键盘上的方向键时没有使用鼠标选择文本的一部分或按住班次,那将是空的。这可能是您的查询返回 ZERO RECORDS 的原因。
请改用以下内容:
Dim ST As String = ComboBox1.SelectedItem.Text
答案 2 :(得分:1)
如果您要更新文本框,这是一个结果(标量值)吗?如果是这样,我要做的第一件事是使用ExecuteScalar而不是ExecuteReader。然后,使用带有断点的调试模式来更好地了解实际发生的情况。可能只是因为你没有得到任何结果。
注意:为了清楚起见,我假设编码错误(内联sql语句,硬编码连接字符串等)。如果不是,请修理它们。