2014-10-31 98 views
0

任何人都可以幫助我使用c#在mysql中插入單引號。我知道如何做到這一點,但我不知道語法,到目前爲止,這是我的代碼在mysql中使用c插入引號#

if (txtcode.Text.Contains("'") == true) 
    { 
     txtcode.Text.Replace("'", "\'"); 
    } 

但我txtcode犯規得到\的價值,也是我嘗試這個代碼

if (txtcode.Text.Contains("'") == true) 
    { 
     txtcode.Text.Replace("'", "\\'"); 
    } 

仍然沒有工作..任何人都可以猜測如何實現這一目標?在此先感謝

回答

8

你不需要執行任何字符串替換 - 只是使用參數化的SQL,它應該沒問題。

所以你不得做到這一點:

// BAD CODE - DO NOT USE 
string sql = "INSERT INTO TABLE Person (ID, NAME) VALUES ('" + id 
    + "', '" + txtCode.Text + "')"; 

即:

  • 易受SQL injection attacks(和尷尬的人物,如引號)
  • 脆在轉換的面(日期/時間轉換特別痛苦)
  • 難以閱讀,因爲它混合了SQL和數據

相反,你會使用類似:

string sql = "INSERT INTO TABLE Person (ID, NAME) VALUES (@id, @name)"; 
using (var command = new MySqlCommand(sql, conn)) 
{ 
    command.Parameters.Add("@id", MySqlDbType.VarChar).Value = id; 
    command.Parameters.Add("@name", MySqlDbType.VarChar).Value = txtCode.Text; 
    command.ExecuteNonQuery(); 
} 
+0

謝謝你救我 – Wielder 2014-10-31 07:50:24

1

你真的應該使用參數化查詢,將正確處理引號中,如:

string s = "Text with this \'quote\'"; 

MySqlCommand cmd = new MySqlCommand("INSERT INTO table (Column) VALUES (@quotedString);", connection); 
cmd.Parameters.AddWithValue("@quotedString", s); 
cmd.ExecuteNonQuery(); 

這也防止SQL注入在旅途中。

0

你可以試試這個:

if (txtcode.Text.Contains("'") == true) 
    { 
     txtcode.Text.Replace("'", @"\\'"); 
    } 
+0

不,'@'讓他們逐字字符串。這將無法正常工作。 – 2014-10-31 07:31:47

+0

也以這種方式保護報價不是一個好主意。你可以用Jon Skeet或Thorsten Dittmas的回答... – ogun 2014-10-31 07:40:27