C# SQL Server查询中的单引号转义-使用参数化值
下面是我修剪过的C#: 我几乎可以输入任何东西,在输入数据库之前,某些特殊字符会被去掉,这对我来说很好,因为哪怕是一个简单的引用都会给工作带来麻烦。我尝试添加C# SQL Server查询中的单引号转义-使用参数化值,c#,sql,sql-server,C#,Sql,Sql Server,下面是我修剪过的C#: 我几乎可以输入任何东西,在输入数据库之前,某些特殊字符会被去掉,这对我来说很好,因为哪怕是一个简单的引用都会给工作带来麻烦。我尝试添加.Replace(“”,“”)添加到Comments变量,但这不会改变任何东西,我认为使用参数应该可以防止这种情况 我知道像这样的问题已经被问了很多次了,但到处都指向“使用参数!” 编辑:鉴于有四个人说了同样的话,我在这里一一作答。 我已经删除了@Comments周围的单引号,但问题完全相同。任何带有单引号的输入都不会输入到数据库中 在使
.Replace(“”,“”)
添加到Comments
变量,但这不会改变任何东西,我认为使用参数应该可以防止这种情况
我知道像这样的问题已经被问了很多次了,但到处都指向“使用参数!”
编辑:鉴于有四个人说了同样的话,我在这里一一作答。 我已经删除了
@Comments
周围的单引号,但问题完全相同。任何带有单引号的输入都不会输入到数据库中
在使用javascript之前,我已经添加了
.replace(/'/g,“”)
,这是可行的,但我不明白为什么我必须这样做。您不需要单引号
command.CommandText = "Insert into Table (Comments)values(@Comments)";
好的,在阅读了hvd
的评论之后,我发现它的工作方式是执行sp_executesql
解决这一问题的方法如下:
thisConnection.Open();
SqlCommand command = new SqlCommand(commandtext, thisConnection);
command.CommandText = "Insert into Table (Comments)values(@Comments)";
SqlParameter param = new SqlParameter();
param.ParameterName = "@Comments";
param.Value = Comments;
command.Parameters.Add(param);
command.ExecuteNonQuery();
thisConnection.Close();
应如图所示:
cmd.CommandText = "INSERT INTO Table (Comments) VALUES(@Comments)"
使用参数时不必转义单引号
假设
Comments
是类型String
,那么只需执行以下操作:
command.CommandText = "Insert into Table (Comments)values(@Comments)";
command.Parameters.Add("@Comments", SqlDbType.VarChar).Value = Comments;
应该是
"Insert into Table (Comments)values(@Comments)"; <-- no single quotes
“插入表(注释)值(@Comments)” 我尝试过类似的方法,但没有得到任何异常,但对于SQL注入来说可能不安全
Comments.Replace("'", $"{(char)39}");
注意到,并更新了我的代码,但它没有改变任何东西。请参阅编辑。@dudledok您可以检查我的编辑,并告诉我是否清楚。-1:参数根本不是这样工作的。它们不是通过文本替换工作的。@hvd我在哪里说过它将是文本替换?我只是说SQL是如何解释这一点的。@hvd顺便说一句,谢谢你至少给出了一个否决投票的理由。比直接投票要好得多。:)您是否遇到错误?也许您简化了这个问题的代码,但在某个地方有一个commandtext
变量,您将该变量传递给SqlCommand
构造函数,然后立即重写该命令的commandtext
属性,所以,commandtext
实际上是未使用的。@hvd您完全正确,上面是未使用的。我已经停止覆盖它了。我将更改上面的代码。
"Insert into Table (Comments)values(@Comments)"; <-- no single quotes
Comments.Replace("'", $"{(char)39}");