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

本文关键字:十进制 格式 不接受 MySQL | 更新日期: 2023-09-27 18:33:51

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

任何人都知道如何实现获得 DOT 而不是逗号?

这是我的代码:

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();
                }

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

任何人都知道如何实现获得 DOT 而不是逗号?

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

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

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

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

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