1

私はこのコードを持っています

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)

ltlgパラメータを columnに格納しようとしていますdecimal(9,6)

ローカルの SQL Server では問題なく動作しましたが、Web サーバーにデプロイすると、このエラーが発生しました

数値をデータ型数値に変換中に算術オーバーフロー エラーが発生しました。ステートメントは終了されました。

精度を 16 に上げることにしたので、列は になりましdecimal(16,6)た。これで、25252525.000000 のような整数が格納されます。

おそらくローカライズの問題ですが、私の質問は、ローカライズを回避して番号を安全に保存する方法ですか?

4

2 に答える 2

2

OK、グーグルで試した後、http://msdn.microsoft.com/en-us/library/ew0seb73.aspxの例に従い、コードで私を駆り立てます:

            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

ローカルとウェブの両方で機能しました。助けてくれたみんなありがとう!

于 2012-10-26T20:18:54.750 に答える
0

プロセスのある時点で小数点以下の桁数を失っているようです。

ロケールについて詳しく知らなくても、「。」の代わりを削除することをお勧めします。「、」を使用して、デフォルトの方法で10進値を解析します。

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が失敗している場所を確認する必要があります。ltlgcom.Parameters

そこから、MS SQLを使用している場合は、SQL Server Profilerを使用して、SQLに渡される値を確認できます。小数点以下の桁数が失われている場所を確認し、直接修正するか、ここで質問を更新できるはずです。

于 2012-10-26T19:54:42.307 に答える