我的代码正在执行我想要的操作,除非它为此行显示错误“输入字符串的格式不正确”:da.SelectCommand.Parameters.AddWithValue("@isbn", Convert.ToDecimal(cboISBN.SelectedValue.ToString()))
在这里,我将提供更多代码,以便我可以理解:
Private Sub cboISBN_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboISBN.SelectedIndexChanged
Try
If (cboISBN.SelectedIndex <> -1) Then
da = New SqlDataAdapter("SELECT isbn FROM book WHERE isbn =@isbn", cn)
da.SelectCommand.Parameters.AddWithValue("@isbn", Convert.ToDecimal(cboISBN.SelectedValue.ToString()))
dt = New DataTable
da.Fill(dt)
If dt.Rows.Count > 0 Then
da = New SqlDataAdapter("SELECT no_of_books FROM book WHERE isbn =@isbn", cn)
da.SelectCommand.Parameters.AddWithValue("@isbn", Convert.ToDecimal(cboISBN.SelectedValue.ToString()))
dt = New DataTable
da.Fill(dt)
TxtNo_of_Books.Text = dt.Rows(0).Item("no_of_books")
End If
End If
Catch ex As Exception
MessageBox.Show("Not Completed Because OF The Following Error " & "%" & ex.Message & "%", "Error", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
我提供的数值是数字而不是字符串,请不要问为什么我使用小数进行ISBN [我的选择;-)]。最后一件事我没有来这里发表我的问题并得到答案,我是2天以来没有找到一个地方来解决我的问题!
答案 0 :(得分:2)
decimal.Parse有一个重载来定义数字样式。
您可以使用Any来处理所有事情。 (例如数千个分隔符,空格等)
Convert.ToDecimal(cboISBN.SelectedValue.ToString(),
System.Globalization.NumberStyles.Any)
第二个问题可能是你的线程运行在不同的文化中,而不是其他线程/应用程序将十进制转换为字符串。 例如在土耳其,十进制和数千个分隔符字符反之亦然。
如果十进制分隔符中有一个点,数千个逗号,则可以使用Invariant Culture进行解析,如下所示:
Convert.ToDecimal(cboISBN.SelectedValue.ToString(),
System.Globalization.NumberStyles.Any,
System.Globalization.CultureInfo.InvariantCulture)
答案 1 :(得分:0)
要真正得到SelectedValue
而不是我在cboISBN.selectedIndex = -1
设置的表单中已加载的值,我们必须将combobox_SelectedIndexChanged
更改为combobox_SelectionChangeCommitted
组合框的事件,然后它将工作顺利,没有任何错误。有关更多说明,请参阅以下代码作为示例:
Private Sub cboISBN_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles cboISBN.SelectionChangeCommitted
Dim v As Decimal = cboISBN.SelectedValue
If (cboISBN.SelectedIndex <> -1) Then
da = New SqlDataAdapter("SELECT isbn, no_of_books FROM book WHERE isbn =@isbn", cn)
da.SelectCommand.Parameters.AddWithValue("@isbn", v)
dt = New DataTable
da.Fill(dt)
If dt.Rows.Count > 0 Then
TxtNo_of_Books.Text = dt.Rows(0).Item("no_of_books")
End If
End If
End Sub