0

私はデータベースにアクセスできますが、このフィールドの1つは倍精度です。通常、テキストボックス1.71または1,71に設定した場合、データベースのフィールドには1.71が含まれているはずです。

しかし、クエリを実行すると、acces'fieldの値は171!!になります。

public const string QUERY = 
        @"UPDATE TBLART 
          SET TBLART.COST = @cost
          WHERE TBLART.CODE= '1'";

var param = new DynamicParameters();
var cost = totalCost.Replace(',', '.'); //totalCost is a textbox
param.Add("cost", Double.Parse(cost), DbType.Double);

gsmconn.Execute(QUERY, param);

私は何が間違っていますか?ありがとう。

4

2 に答える 2

2

double.Parseデフォルトでは、現在のスレッドのカルチャを使用します。あなたの現在の文化では「。」が使用されていると思います。グループ化セパレーターとして。

2つのオプション:

  • Replaceすでに行っているように引き続き使用しますがCultureInfo.InvariantCulture、解析時に指定します
  • 置換を削除し、元の値を解析するときに現在のスレッドのカルチャを使用します。これは、ユーザーに適した文化に依存していますが、その場合はおそらくより良い解決策です。(そうでない場合、「1,234.56」と入力すると、「1234より少し大きい」という値を期待したときに解析エラーが発生します。)
于 2013-03-26T18:12:32.070 に答える
0

Windowsフォームで正しく覚えていれば、doubleプロパティをテキストボックスにバインドでき、解析と変換が自動的に処理されます。文字列からdoubleへの解析を手動で実行しないでください。

この問題は、.NETFrameworkによってすでに解決されています。

別の提案として、データアクセスコードは解析を行わないようにする必要があります。それはいくつかのより高い層で行われるべきです。ただし、フレームワークに任せたほうがよいでしょう。

于 2013-03-26T18:27:01.353 に答える