Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 输入字符串的格式不正确?但事实确实如此_Sql Server_Vb.net_Visual Studio - Fatal编程技术网

Sql server 输入字符串的格式不正确?但事实确实如此

Sql server 输入字符串的格式不正确?但事实确实如此,sql-server,vb.net,visual-studio,Sql Server,Vb.net,Visual Studio,我的代码正在做我想从中得到的事情,只是它显示了一个错误,输入字符串的格式不适合此行:da.SelectCommand.Parameters。AddWithValue@isbn,Convert.ToDecimalcboISBN.SelectedValue.ToString 在这里,我将提供更多的代码,以便理解我所做的: 私有子cboISBN\u SelectedIndexChangedsender作为对象,e作为EventArgs处理cboISBN。SelectedIndexChanged 尝试

我的代码正在做我想从中得到的事情,只是它显示了一个错误,输入字符串的格式不适合此行:da.SelectCommand.Parameters。AddWithValue@isbn,Convert.ToDecimalcboISBN.SelectedValue.ToString 在这里,我将提供更多的代码,以便理解我所做的:

私有子cboISBN\u SelectedIndexChangedsender作为对象,e作为EventArgs处理cboISBN。SelectedIndexChanged 尝试 如果cboISBN.SelectedIndex-1,则 da=新SQLDataAdapter从书中选择isbn,其中isbn=@isbn,cn da.SelectCommand.Parameters。AddWithValue@isbn,Convert.ToDecimalcboISBN.SelectedValue.ToString dt=新数据表 菲尔特夫人 如果dt.Rows.Count>0,则 da=新的SQLDataAdapter从isbn=@isbn,cn的书中选择无书 da.SelectCommand.Parameters。AddWithValue@isbn,Convert.ToDecimalcboISBN.SelectedValue.ToString dt=新数据表 菲尔特夫人 TxtNo_of_Books.Text=dt.Rows0.Itemno_of_Books 如果结束 如果结束 特例 MessageBox.Show未完成,因为出现以下错误&%&ex.Message&%,错误_ MessageBoxButtons.OK,MessageBoxIcon.Error 结束尝试 端接头
我提供的值是数字而不是字符串,请不要问我为什么在ISBN中使用十进制[my choice;-]。最后一件事,我不是来这里发布我的问题并得到答案的,我在谷歌上搜索了两天,没有找到一个地方来解决我的问题

decimal.Parse有一个重载来定义数字样式

你可以用任何方法来处理一切。e、 g.千位分隔符、空格等

Convert.ToDecimal(cboISBN.SelectedValue.ToString(), 
    System.Globalization.NumberStyles.Any)
第二个问题可能是,您的线程运行的区域性与将十进制转换为字符串的de其他线程/应用程序运行的区域性不同。 例如,在土耳其,十进制和千位分隔符字符是相反的

如果小数点分隔符中有一个点,逗号以千为单位,则可以在解析时使用不变区域性,如下所示:

Convert.ToDecimal(cboISBN.SelectedValue.ToString(), 
    System.Globalization.NumberStyles.Any,
    System.Globalization.CultureInfo.InvariantCulture)
要真正获得SelectedValue,而不是我设置cboISBN.selectedIndex=-1的表单中已加载的值,我们必须将combobox\u selectedIndex更改为combobox\u SelectionChangeCommittedevent of combobox,然后它将顺利工作,不会出现任何错误。有关更多说明,请参见以下代码作为示例:

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

调试的方法是在引发异常时检查cboISBN.SelectedValue.ToString的值。您认为它是数值的,但ToDecimal方法已确定它不是。。。如果cboISBN.SelectedValue的值为十进制,为什么需要执行字符串/转换?只需尝试传递cboISBN.SelectedValue或CTypecboISBN.SelectedValue,Decimal以及DB中列的数据类型是什么?数据库似乎与此问题无关,异常是抱怨字符串无效,并由Convert.ToDecimal引发。这是否仅与此isbn值有关?如果是,请再次检查以确保您没有为一个或多个零输入字母Os@Plutonix. 我甚至不确定是否需要加入。我认为第二个问题就是所需要的。它要么返回一个不包含任何书籍的结果,要么不返回任何行。在使用if语句运行该查询之后,可以覆盖所有这些内容。如果rows.count=0,则0书籍使用从查询字段中收到的值。OP认为输入字符串为10000000002,不涉及分隔符。对,我的答案是在看到数字之前。。但即使如此,我认为在这个方法之前,在两边使用不变量文化转换为字符串,然后在这个方法中转换回十进制是一个更好的习惯,即使是对于整数。