2014-10-31 75 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