mysql不接受正确格式的十进制

时间:2012-05-09 18:23:35

标签: c# mysql decimal

当我从C#发送十进制值时,例如:5.54 当我执行查询时,我可以看到我的变量表示为5,54

任何人都知道如何获得DOT而不是COMMA?

这是我的代码:

using (MySqlConnection conn = new MySqlConnection(conn_string.ToString()))
                using (MySqlCommand cmd = conn.CreateCommand())
                {  
                    cmd.CommandText = string.Format("INSERT Test (lat, long) VALUES ({0},{1})",
                                                   OSGconv.deciLat, OSGconv.deciLon);
                    conn.Open();
                    cmd.ExecuteNonQuery();
                }

2 个答案:

答案 0 :(得分:4)

  

任何人都知道如何获得DOT而不是COMMA?

不要直接将值嵌入到SQL中。请改用参数化SQL。有关示例,请参阅MySqlCommand.Parameters的文档。您总是使用参数化查询:

  • 他们将代码与数据分开
  • 它们可以防止SQL注入攻击(这些数字不是问题,但考虑字符串......)
  • 他们阻止像这样的转换问题

这里有一个更普遍的观点:不要再执行任何转换了。每次将数据从一种形式转换为另一种形式时,您都可能会丢失数据或更糟。如果您能够尽可能长时间地将数据保存在最合适的表示中,则可以最大限度地减少问题。

答案 1 :(得分:0)

我完全赞同其他建议。至于有关逗号或点的其他问题,它取决于CurrentCulture。要获得正确的格式,您必须使用ToString providing Culture.InvariantCulture as the second parameter。这将使用小数点分隔符。

但是,我坚持认为,另一个答案是非常好的建议:使用DbParameters。我添加:传递C#中保存的值,而不是将其转换为字符串。它将由ADO.NET提供程序正确处理。即如果您必须传递float变量,请将其传递而不转换为string,但原样是float值。