繁体   English   中英

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

[英]C#, replacing special character in query

我在数据库中有一条记录,其中包含特殊字符,例如&,' (撇号)。

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

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

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

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

怎么解决呢?

我正在使用C#

您的问题尚不清楚,但是答案几乎肯定是不会在SQL语句中包含数据。 而是使用参数化查询,因此您无需担心自己执行任何转义等操作。

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

不要在查询中附加文字。 在Google中搜索SQL注入。 这是一个大问题,您不应该这样做。 您可能会使您的应用程序容易受到严重攻击。

一种解决方案是在查询中使用SQL参数。 在此处查看更多信息: 在命令中添加参数

使用参数化查询 他们将为您处理特殊字符的转义,并有助于防御SQL注入攻击。 它们还为SQL Server提供了更好的机制来缓存执行路径以提高性能。

永远,永远, 永远使用串联SQL。

更好的方法是使用参数化查询。 如果事先未正确地对数据进行语法处理,则用于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);

您需要使用参数。

有关更多信息,请查阅文档以了解所使用的内容。

在传入之前在名称变量中用"''"替换"'" ,您应该可以。

编辑:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM