Warm tip: This article is reproduced from serverfault.com, please click

vb.net-INSERT期间发生十进制数引发异常

(vb.net - Decimal number throwing exception during INSERT)

发布于 2016-02-04 06:18:53

我已经从VB.NET应用程序内部编写了INSERT语句,该语句将一堆数据插入到包含Number列的表中。MS访问是数据库。“周期”是表中定义为“数字”类型的列。我在小数点后插入两位十进制值,以插入到此列中。除了德国以外,该插件都可以正常工作。我意识到在德国,他们使用“,”(逗号)代替“”。(点)用于小数点分隔。因此,从德国Windows机器运行时,此应用程序在插入时失败。请帮忙。

Questioner
Sameer
Viewed
11
Dai 2016-02-04 14:46:18

数字的格式是一个表示问题,而不是数据持久性问题。如果数字到字符串的格式正在影响你的SQL命令,那么听起来你正在执行字符串串联以在字符串中形成SQL命令。不要这样做

相反,请使用参数化查询,以这种方式将数字的原始二进制值(而不是格式字符串)发送到数据库,如下所示:

Dim cmd As New SqlCommand("INSERT INTO Foo ( DecimalValue ) VALUES ( @value )")
cmd.Parameters.Add( "@value", SqlDbType.Decimal ).Value = someDecimal

请注意,参数占位符的语法取决于你所使用的数据库软件。有关详细信息,请查阅系统的SQL参考。

请注意,如果要确保十进制数字的格式相同,而不考虑计算机的语言设置,请执行以下操作:

Dim s As String
Dim d As Decimal = 2.0
s = d.ToString( CultureInfo.InvariantCulture )

我希望.NET有一个内置ToStringInvariant方法来避免需要导入System.Globalization