我正在处理一个连接到MySQL并更新表单中的字符串的C#窗体。我有一切正常工作,除了一个小问题。
假设您要将“notes”字段更新为“the dog's bone”,撇号会导致SQL查询结束并导致错误。我怎么能绕过这个呢?
UPDATE `database`
SET `notes` = 'The dog's bone'
WHERE `Pet` = 'Dog';
谢谢!
答案 0 :(得分:5)
你可以escape '
character在MySQL中加倍''
。
除此之外,如果您使用parameterized queries,则根本不需要 。只需将The dog's bone
字符串直接传递给您的参数化查询,就可以了。
此外,强烈怀疑您尝试使用UPDATE
而不是SELECT
语句。在MySQL中,SELECT
syntax没有SET
部分。
使用a reserved keyword as a column name是一个坏主意。最佳做法是将您的database
列名称更改为非 - 保留字词。
using(var con = new MySqlConnection(conString))
using(var cmd = con.CreateCommand())
{
cmd.CommandText = @"UPDATE `database` SET notes = @notes
WHERE Pet = @pet";
cmd.Parameters.AddWithValue("@notes", "The dog's bone");
cmd.Parameters.AddWithValue("@pet", "Dog");
con.Open();
cmd.ExecuteNonQuery();
}
我在我的代码中使用AddWithValue
方法作为示例,因为我不知道您的列类型,但您不使用它。 This method may generate unexpected and surprising results sometimes。使用Add
方法重载来指定参数类型及其大小。
答案 1 :(得分:2)
使用另一个单引号'
来逃避它:
SELECT `database`
SET `notes` = 'The dog''s bone'
WHERE `Pet` = 'Dog';