.Net MySQL驱动程序没有正确处理

时间:2013-09-18 15:34:51

标签: mysql .net

我有一个问题:

UPDATE tableA SET content = '[{\"Id\":7,\"FParam\":{\"html\":\"\\\"<p>\\\\n\\\\ttest</p>\\\\n\\\"\"}}]',time = 1379516448 WHERE id = 1107;

使用phpMyAdmin运行时,内容列具有以下正确值:

[{"Id":7,"FParam":{"html":"\"<p>\\n\\ttesting publishing</p>\\n\""}}]

当我使用.NET MySQL Framework使用以下简单代码运行查询时:

using (var connection = new MySqlConnection(ConnectionString)) {
    await connection.OpenAsync();

    string updateCommandSQL = "UPDATE tableA SET content = '[{\"Id\":7,\"FParam\":{\"html\":\"\\\"<p>\\\\n\\\\ttest</p>\\\\n\\\"\"}}]',time = 1379516448 WHERE id = 1107"

    using (var updateCommand = new MySqlCommand(updateCommandSQL, connection))
    {
        return await updateCommand.ExecuteNonQueryAsync();
    }
}

我在db中得到以下结果:

[{"Id":7,"FParam":{"html":""<p>\n\ttest for group</p>\n""}}]

正如您所看到的,SQL在两个源中都是相同的。由于某些原因,MySQL Framework没有运行相同的更新语句。

我错过了什么吗?打开连接时是否有格式化选项或设置?有什么建议吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以花费大量时间尝试正确地转义字符串,但我强烈建议参数化您的查询。这将解决您的问题,并防止可能的SQL注入攻击发生。

首先,创建您的SQL语句:

string updateCommandSQL = "UPDATE tableA SET content = @content, time = @time WHERE id = @id";

接下来,将三个参数添加到SqlCommand

updateCommand.Parameters.AddWithValue("@content", newContent);
updateCommand.Parameters.AddWithValue("@time", 1379516448);
updateCommand.Parameters.AddWithValue("@id", 1107);

希望这有帮助!