我在包含&,'
(撇号)等特殊字符的数据库中有记录。
记录看起来像这样.. stack'overflow
。
在我的查询中,我写的是这样的。
where name = ' " +name+ " ' ";
假设名称为stack'overflow
- 那么它会给我一个语法错误。
如何解决?
我正在使用C#
答案 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)
在您的名称变量中用"'"
替换"''"
,您应该没问题。
编辑:
是这只是一个临时解决方案。要永久摆脱您的问题,请使用参数化查询。