我的插入请求中有一个双精度值。我将逗号在这个双精度值中更改为点,并且在创建 MySqlCommand 时有 12.5 而不是 12,5,就像在 MySQL 规则中一样。但是我的字符串将我的点更改为逗号并发送带有逗号的插入请求并触发了异常。为什么 MySqlCommand 创建一个包含 12,5 而不是 12.5 的字符串?
string valueCapteur = "12,5";
valueCapteur = valueCapteur.Replace(',', '.');
double.TryParse(valueCapteur, NumberStyles.Any, CultureInfo.InvariantCulture, out double value);
MySqlCommand cmd = new MySqlCommand
{
Connection = cnn,
CommandText = "INSERT INTO `notification`(`Value`) VALUES (" + value + ");"
};
cmd.ExecuteNonQuery();
当我调试值 = 12.5 但在我的 cmd.CommandText 值 = 12,5
你想要
的是参数:
using(MySqlCommand cmd = new MySqlCommand {
Connection = cnn,
CommandText = "INSERT INTO `notification`(`Value`) VALUES (@value);"
})
{
cmd.Parameters.AddWithValue("@value", value);
cmd.ExecuteNonQuery();
}
或使用"Dapper"之类的工具:
conn.Execute("INSERT INTO `notification`(`Value`) VALUES (@value);", new { value });
除了避免 SQL 注入之外,参数的一个关键点是它避免了区域性和格式问题。