【发布时间】:2015-12-30 14:15:00
【问题描述】:
我的代码正在执行我想要的操作,但它显示此行的错误“输入字符串格式不正确”: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 天,但没有找到解决问题的地方!
【问题讨论】:
-
调试这个的方法是在抛出异常的时候检查
cboISBN.SelectedValue.ToString()的值。您认为它是数字,但ToDecimal方法已确定它不是。 -
所以...如果
cboISBN.SelectedValue的值为十进制,为什么需要toString/Convert?试试通过cboISBN.SelectedValue或者CType(cboISBN.SelectedValue, Decimal)那么DB中列的数据类型是什么? -
数据库似乎与问题无关,异常是抱怨无效的String,被
Convert.ToDecimal抛出。 -
这是否只发生在这个 isbn 值上?如果是这样,请仔细检查以确保您没有为一个或多个零输入字母 O
-
@Plutonix。我什至不确定是否需要加入。我认为第二个查询就足够了。它要么返回 no_of_books 的结果,要么不返回任何行。在使用 if 语句运行该查询之后,所有这些都可以涵盖。如果 rows.count = 0 则 0 本书使用从查询字段中接收到的值。
标签: sql-server vb.net visual-studio