无法将参数值从字符串转换为十进制(当字段为空时)

时间:2016-05-23 05:49:13

标签: sql-server vb.net

我遇到了一半问题。
现在问题是我写的

使用vb.net和mssql 2014作为后端

这是我写的查询

cmd = New SqlCommand(("insert into FAMPAR(Open_Bal, Curr_Bal, Disc_Perc, Stop_Days, Fix_Days) values(@Open_Bal , @Curr_Bal , @Disc_Perc , @Stop_Days ,@Fix_Days)"), con1)
            cmd.Parameters.Add("Open_Bal", SqlDbType.Decimal).Value = txtOpeningBal.Text
            cmd.Parameters.Add("Curr_Bal", SqlDbType.Decimal).Value = txtCurrBal.Text
            cmd.Parameters.Add("Disc_Perc", SqlDbType.Decimal).Value = txtDisc.Text
            cmd.Parameters.Add("Stop_Days", SqlDbType.Decimal).Value = txtStopDays.Text
            cmd.Parameters.Add("Fix_Days", SqlDbType.Decimal).Value = txtBillOutstdg.Text
ExecuteQuery1()

现在,当我在vbform中的每个字段中写入时,一切正常,但是当我将一个字段留空时,它会创建异常。

  

SystemformatException:无法从字符串转换参数值   到十进制......

现在它显示systemformatException所以它是系统端的错误还是错误sql端...... ???

我必须保持盒子有时空,有时填满(填写文本框时没问题,查询执行成功),那么我该怎么办?

2 个答案:

答案 0 :(得分:1)

您应该在代码中进行验证,以检查值是否为空。您可以使用Decimal.TryParse方法请参阅link。如果值为空,则在文本中指定“0”值。从链接中的示例:

If Decimal.TryParse(txtOpeningBal.Text, number) Then cmd.Parameters.Add("Open_Bal", SqlDbType.Decimal).Value = number Else cmd.Parameters.Add("Open_Bal", SqlDbType.Decimal).Value = DBNull.value End If

注意:上面只是一个例子。

答案 1 :(得分:1)

你需要在赋值之前将Val()函数应用于值,如下所示

cmd.Parameters.Add("Open_Bal", SqlDbType.Decimal).Value = Val(txtOpeningBal.Text)
cmd.Parameters.Add("Curr_Bal", SqlDbType.Decimal).Value = Val(txtCurrBal.Text)
cmd.Parameters.Add("Disc_Perc", SqlDbType.Decimal).Value = Val(txtDisc.Text)
cmd.Parameters.Add("Stop_Days", SqlDbType.Decimal).Value = Val(txtStopDays.Text)
cmd.Parameters.Add("Fix_Days", SqlDbType.Decimal).Value = Val(txtBillOutstdg.Text)