我正在連接到MySQL並更新窗體內的字符串的C#窗體窗體上工作。除了一個小問題,我已經正常工作了。在字符串中使用撇號更新字符串
假設您要更新「筆記」字段以讀取「狗的骨頭」,該撇號導致SQL查詢結束並導致錯誤。我怎樣才能解決這個問題?
UPDATE `database`
SET `notes` = 'The dog's bone'
WHERE `Pet` = 'Dog';
謝謝!
我正在連接到MySQL並更新窗體內的字符串的C#窗體窗體上工作。除了一個小問題,我已經正常工作了。在字符串中使用撇號更新字符串
假設您要更新「筆記」字段以讀取「狗的骨頭」,該撇號導致SQL查詢結束並導致錯誤。我怎樣才能解決這個問題?
UPDATE `database`
SET `notes` = 'The dog's bone'
WHERE `Pet` = 'Dog';
謝謝!
與另一單引號'
退出:
SELECT `database`
SET `notes` = 'The dog''s bone'
WHERE `Pet` = 'Dog';
謝謝先生,你有任何想法如何以編程方式做到這一點嗎? –
我建議您按照sonorGönüls建議使用參數化查詢。 –
你在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
方法重載指定您的參數類型及其大小。
在撇號前添加另一個單引號或添加一個Salah – Jaylen