2015-07-20 85 views
0

我正在连接到MySQL并更新窗体内的字符串的C#窗体窗体上工作。除了一个小问题,我已经正常工作了。在字符串中使用撇号更新字符串

假设您要更新“笔记”字段以读取“狗的骨头”,该撇号导致SQL查询结束并导致错误。我怎样才能解决这个问题?

UPDATE `database` 
SET `notes` = 'The dog's bone' 
WHERE `Pet` = 'Dog'; 

谢谢!

+0

在撇号前添加另一个单引号或添加一个Salah – Jaylen

回答

2

与另一单引号'退出:

SELECT `database` 
SET `notes` = 'The dog''s bone' 
WHERE `Pet` = 'Dog'; 
+0

谢谢先生,你有任何想法如何以编程方式做到这一点吗? –

+1

我建议您按照sonorGönüls建议使用参数化查询。 –

5

你在MySQL中使用它像''可以加倍escape ' character

除此之外,如果您使用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方法重载指定您的参数类型及其大小。