Asp.net 从vb.net到SQL Server中存储的十进制转换

Asp.net 从vb.net到SQL Server中存储的十进制转换,asp.net,sql-server,parsing,localization,decimal,Asp.net,Sql Server,Parsing,Localization,Decimal,我有这段代码 Dim lt As Decimal Dim lg As Decimal Decimal.TryParse(tbLat.Value.Replace(".", ","), lt) Decimal.TryParse(tbLng.Value.Replace(".", ","), lg) com.Parameters.AddWithValue("latitude", lt) com.Parameters.AddWithValue("longtitude", lg) 在其中,我试图将lt和l

我有这段代码

Dim lt As Decimal
Dim lg As Decimal
Decimal.TryParse(tbLat.Value.Replace(".", ","), lt)
Decimal.TryParse(tbLng.Value.Replace(".", ","), lg)
com.Parameters.AddWithValue("latitude", lt)
com.Parameters.AddWithValue("longtitude", lg)
在其中,我试图将
lt
lg
参数存储在
decimal(9,6)
列中

在本地SQL Server中,它工作得很好,但是当我部署到web服务器时,它给了我这个错误

将数值转换为数据类型数值时出现算术溢出错误。声明已终止

我决定将精度提高到16,因此列变成
十进制(16,6)
。现在它存储的是25252525.000000这样的整数


可能是本地化的问题,但我的问题是如何避免本地化并安全地存储数字?

在这个过程中的某个点上,您似乎丢失了小数点

在不了解您的语言环境的情况下,我建议删除“.”替换为“,”,并仅以默认方式解析十进制值:

Dim lt As Decimal
Dim lg As Decimal
If (Decimal.TryParse(tbLat.Value, lt)) And (Decimal.TryParse(tbLng.Value, lg)) Then
   com.Parameters.AddWithValue("latitude", lt)
   com.Parameters.AddWithValue("longtitude", lg)
Else
   'Display Error
End If
如果不起作用,您应该进行一些调试并检查
tbLat.Value
tbLng.Value
lt
lg
,以及
com.Parameters
集合,以查看转换失败的位置


如果您使用的是MS SQL,那么可以使用SQL Server Profiler查看传递给SQL的值。您应该能够看到小数位丢失的位置,并可以直接修复它,或者在此处更新您的问题。

好的,在谷歌搜索并尝试之后,我将按照下面的示例进行操作,这将在代码中激励我:

            Dim style As NumberStyles = NumberStyles.Number Or NumberStyles.AllowCurrencySymbol
            Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture("en-GB")
            Dim lt As Decimal
            Dim lg As Decimal
            If Decimal.TryParse(tbLat.Value, style, culture, lt) Then
                com.Parameters.AddWithValue("latitude", lt)
            End If
            If Decimal.TryParse(tbLng.Value, style, culture, lg) Then
                com.Parameters.AddWithValue("longtitude", lg)
            End If
在本地和网络上都有效。
谢谢每一个试图帮助你的人

是的,tbLat和tbLng是否将其编号存储为
25252525.000000
。它应该是什么样子?谢谢你的回答。我从tbLat.Value开始,但这给了我一个错误“算术溢出错误,将数值转换为数据类型数值。语句已终止”。因此我替换了点符号并在本地工作。当我部署项目时,同样的错误出现在web上。现在我正在寻找绕过此类错误的最安全方法。在这种情况下,听起来这绝对是一个本地化问题,不幸的是,我在这方面没有经验。我建议发布有关您在本地和生产环境中使用的IIS和SQL版本的信息,以及每台服务器所在的区域设置。