c#mysql cultureinfo.invariantculture

yzxexxkh  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(337)

我的insert请求中有一个双值。在这个双精度值中,我将逗号改为一个点,在创建mysqlcommand时使用12.5而不是12,5,就像在mysql规则中一样。但是我的字符串将我的点改为逗号,并用逗号发送insert请求,并引发了一个异常。为什么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();

当我调试value=12.5但在cmd.commandtext value=12,5时

vlurs2pr

vlurs2pr1#

您需要的是参数:

using(MySqlCommand cmd = new MySqlCommand {
    Connection = cnn,
    CommandText = "INSERT INTO `notification`(`Value`) VALUES (@value);"
})
{
    cmd.Parameters.AddWithValue("@value", value);
    cmd.ExecuteNonQuery();
}

或者用“潇洒”这样的工具:

conn.Execute("INSERT INTO `notification`(`Value`) VALUES (@value);", new { value });

除了避免sql注入之外,参数的一个关键点是它避免了区域性和格式问题。

相关问题