2015-07-20 84 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方法重載指定您的參數類型及其大小。