C#,替换查询中的特殊字符

时间:2011-03-15 15:01:41

标签: c#

我在包含&,'(撇号)等特殊字符的数据库中有记录。

记录看起来像这样.. stack'overflow

在我的查询中,我写的是这样的。

where name = ' " +name+ " ' ";

假设名称为stack'overflow - 那么它会给我一个语法错误。

如何解决?

我正在使用C#

6 个答案:

答案 0 :(得分:4)

你的问题很不清楚,但答案几乎肯定不是在SQL语句中包含数据。请改用参数化查询,这样您就不必担心自己执行任何转义等。

作为示例,请查看SqlCommand.Parameters文档 - 但请注意,不同的数据库提供程序使用不同的参数方法(例如,命名与位置)。

答案 1 :(得分:2)

不要将文本附加到查询中。搜索谷歌的SQL注入。这是一个大问题,你不应该这样做。你可能会让你的应用程序受到严重攻击。

一种解决方案是在查询中使用SQL参数。请查看此处了解更多信息:Adding Parameters to Commands

答案 2 :(得分:2)

使用parameterized queries。他们将为您处理特殊字符的转义,并有助于防止SQL注入攻击。它们还为SQL服务器提供了一种更好的机制来缓存执行路径以提高性能。

从来没有永远使用连接的SQL。

答案 3 :(得分:2)

更好的方法是使用参数化查询。如果事先没有正确地对数据进行正确处理,那么SQL的字符串构建可能非常危险。

尝试这样的事情:

string query = "SELECT * FROM myTable WHERE name = @p_name";

SqlCommand cmd = new SqlCommand(query, sqlConnection);
cmd.Parameters.AddWithValue("@p_name",yourTextItem);

根据您的具体情况更新:

string myName = TextBox1.Text;

string query = "SELECT * FROM myTable WHERE name LIKE %@p_name%";

SqlCommand cmd = new SqlCommand(query, sqlConnection);
cmd.Parameters.AddWithValue("@p_name",myName);

答案 4 :(得分:0)

您需要使用参数。

有关详细信息,请参阅文档以了解您正在使用的任何内容。

答案 5 :(得分:0)

在传入之前,

在您的名称变量中用"'"替换"''",您应该没问题。

编辑:

是这只是一个临时解决方案。要永久摆脱您的问题,请使用参数化查询。