0

我有一个数据库访问权限,其中一个字段是双精度的。通常,如果我在文本框中设置 1.71 或 1,71,则数据库中的字段应包含 1.71。

但如果我执行查询,访问字段的值为 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默认情况下将使用当前线程的文化。我怀疑您当前的文化使用“。” 作为分组分隔符。

两种选择:

  • 照样继续使用Replace,但CultureInfo.InvariantCulture解析时再指定
  • 去掉替换,解析原始值时只使用当前线程的文化。这依赖于适合用户的文化,但在这种情况下可能是更好的解决方案。(否则,输入“1,234.56”的人在预期值“略大于 1234”时会出现解析错误。)
于 2013-03-26T18:12:32.070 回答
0

如果我在 Windows 窗体中没记错的话,您可以将双重属性绑定到文本框,它会自动处理解析和转换。您不应该手动将字符串解析为双精度。

.NET 框架已经为您解决了这个问题。

另一个建议,你的数据访问代码不应该做任何解析。这应该在更高的层中完成。但最好把它留给框架。

于 2013-03-26T18:27:01.353 回答