Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#,替换查询中的特殊字符_C# - Fatal编程技术网

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

C#,替换查询中的特殊字符,c#,C#,我在数据库中有一条记录,其中包含特殊字符,如&,(撇号) 唱片是这样的堆栈溢出 在我的提问中,我是这样写的 where name = ' " +name+ " ' "; 假设名称是stack'overflow——那么它会给我一个语法错误 如何解决 我使用的是C#您需要使用参数 有关更多信息,请参阅您正在使用的任何工具的文档。在传入之前,将您的名称变量中的“替换为”,这样您就可以了 编辑: 是的,这只是一个暂时的解决办法。要永久解决您的问题,请使用参数化查询 您的问题非常不清楚,但答案几乎肯定是

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

唱片是这样的<代码>堆栈溢出

在我的提问中,我是这样写的

where name = ' " +name+ " ' ";
假设名称是
stack'overflow
——那么它会给我一个语法错误

如何解决


我使用的是C#

您需要使用参数

有关更多信息,请参阅您正在使用的任何工具的文档。

在传入之前,将您的名称变量中的
替换为
,这样您就可以了

编辑:


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

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


例如,请查看文档,但要注意,不同的数据库提供程序对参数使用不同的方法(例如,命名与定位)。

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

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

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


永远不要使用连接SQL。

更好的方法是使用参数化查询。如果事先没有正确地对数据进行SANTIZE,那么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);

或者你可以使用@SLaks'或@JonSkeet的建议-1来建议这一点,即使是作为临时解决方案。临时解决方案有变成永久解决方案的坏习惯。我使用%%作为名称,以便它可以搜索指定的字符串。在这种情况下,如何执行此操作?如果不是参数化查询,那么它就像“%”“+name+“%”,但在您的情况下如何做呢?好的,那么您可以将其作为正常情况写入查询中,并围绕参数。如果愿意,您甚至可以将其附加到“yourTextItem”中。我的参数名称是name,因此类似于sqlcmd1.parameter.addwithvalue(“name”,?)我被搞糊涂了this@safi-我已经用调整后的示例更新了我的原始帖子。希望这能有所帮助。我正在使用%%和名称,以便它可以搜索指定的字符串。在这种情况下,如何执行此操作?如果不是参数化查询,则类似于“%”+名称+“%”,但是在你的例子中,怎么做呢?@safi:你应该使用一个参数化的LIKE子句。您仍然需要考虑专门针对类似参数的任何转义,但这是另一回事。我使用%%作为名称,以便它可以搜索指定的字符串。在这种情况下,如何执行?如果不是参数化查询,那么它就像“%”“+name+“%”,但在您的情况下如何做?@safi:您仍然可以使用参数。只需将
%
s放在参数中。我的参数名是name,因此类似于sqlcmd1.parameter.addwithvalue(“name”,?),我很困惑this@safi:只需传递
“%”+name+“%“
作为参数值很重要:您还应该对没有特殊字符的记录使用参数化查询。您应该检查您的代码并在任何地方修复它,而不仅仅是针对这个特定的调用。