Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 - Fatal编程技术网

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

Sql server 无法将参数值从字符串转换为十进制(当字段为空时),sql-server,vb.net,Sql Server,Vb.net,我有一个问题已经解决了一半。 现在的问题是我写的 使用vb.net和mssql 2014 ent作为后端 这是我写的问题 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.Par

我有一个问题已经解决了一半。
现在的问题是我写的

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

这是我写的问题

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端出错


我有时需要保持框为空,有时需要填充(填充文本框时没有问题,查询会成功执行),那么我该怎么办呢?

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

如果是Decimal.TryParse(txtOpeningBal.Text,number),则
cmd.Parameters.Add(“Open_Bal”,SqlDbType.Decimal)。Value=number
其他的
cmd.Parameters.Add(“Open_Bal”,SqlDbType.Decimal).Value=DBNull.Value
如果


注意:以上只是一个示例。

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

如果是Decimal.TryParse(txtOpeningBal.Text,number),则
cmd.Parameters.Add(“Open_Bal”,SqlDbType.Decimal)。Value=number
其他的
cmd.Parameters.Add(“Open_Bal”,SqlDbType.Decimal).Value=DBNull.Value
如果


注意:以上只是一个示例。

您只需对值应用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)

在赋值之前,只需对值应用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)

为什么您希望一个空字符串能够神奇地变成一个数字?在需要数字的地方停止使用字符串。您应该将这些字符串转换为数字,然后可以在没有数字时执行任何适当的操作,例如,通知用户他们未能输入有效值,或者可能使用零。另外,如果用户在其中一个文本框中输入“Hello World”,会发生什么?我有一个重新限制的文本框,他们只能输入数字和“.”(点)@jmcilhinney此外,我还做了一些类似的事情,比如如果stopdays为0,那么程序将停止用户生成更多数据,因此显然,如果用户不添加任何数据,我不能让文本框默认为0。。。告诉我另一种编写查询的方法,然后是friend。。3天前,我在stackoverflow@jmcilhinneyywy上教过如何使用参数编写查询。你到底希望一个空字符串能够神奇地变成一个数字吗?在需要数字的地方停止使用字符串。您应该将这些字符串转换为数字,然后可以在没有数字时执行任何适当的操作,例如,通知用户他们未能输入有效值,或者可能使用零。另外,如果用户在其中一个文本框中输入“Hello World”,会发生什么?我有一个重新限制的文本框,他们只能输入数字和“.”(点)@jmcilhinney此外,我还做了一些类似的事情,比如如果stopdays为0,那么程序将停止用户生成更多数据,因此显然,如果用户不添加任何数据,我不能让文本框默认为0。。。告诉我另一种编写查询的方法,然后是friend。。3天前,我刚从stackoverflow@jmcilhinneyIs教过如何使用参数编写查询。还有其他方法吗?因为我无法将0添加到空字段,它将进一步验证用户。列是否可以为空?如果是,我建议的解决方案是插入一个空值。是。我就是这么想的。您可以尝试传递
DBNull.Value
.okie,但是我应该如何像在参数中传递null值那样进行编写呢???thanx,我说您在尝试之后,会成功的。我猜有没有其他方法,因为我无法将0添加到空字段,它将进一步验证用户。您的列可以为null吗?如果是,我建议的解决方案是插入一个空值。是。我就是这么想的。您可以尝试传递
DBNull.Value
.okie,但是我应该如何像在参数中传递null值那样进行编写呢???thanx,我说您在尝试之后,我想会成功的