INSERT期间的十进制数抛出异常

时间:2016-02-04 06:18:53

标签: vb.net ms-access

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

4 个答案:

答案 0 :(得分:3)

数字格式是一种表示问题,而不是数据持久性问题。如果数字到字符串格式化正在影响您的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

答案 1 :(得分:2)

my answer to your other question here一样,如果使用参数化查询,问题就会消失。您对该答案的评论声称更改代码为时已晚,但现在您可能会重新考虑。您可以继续将kluges扔进代码中以修复"修复"德国用户面临的问题,或者您可以更改代码以正确执行操作。

答案 2 :(得分:0)

试试这个

'n as integer
'MyArr() as double

For i=1 to n
   MyArr(i,1)=Replace(MyArr(i, 1), ",", ".")
next i

答案 3 :(得分:0)

访问十进制值定义:

.Parameters.AddWithValue("@decFRRate", ldecFRRate)