我遇到了一半问题。
现在问题是我写的
使用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端...... ???
我必须保持盒子有时空,有时填满(填写文本框时没问题,查询执行成功),那么我该怎么办?
答案 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)