1

例如,当我从 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();
                }
4

2 回答 2

4

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

不要一开始就将值直接嵌入到您的 SQL 中。请改用参数化 SQL。MySqlCommand.Parameters有关示例,请参阅文档。您应该始终使用参数化查询:

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

这里有一个更普遍的观点:不要执行比您必须执行的更多的转换。每次将数据从一种形式转换为另一种形式时,都有丢失数据或更糟的风险。如果您可以尽可能长时间地将数据保持在最合适的表示中,那么您将最大限度地减少问题。

于 2012-05-09T18:27:41.550 回答
0

我完全同意另一个建议。至于关于逗号或点的其他问题,则取决于 CurrentCulture。要获得正确的格式,您必须使用 ToString,提供 Culture.InvariantCulture 作为第二个参数。这将使用点作为小数分隔符。

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

于 2012-05-09T18:38:44.773 回答