C# SQL Server查询中的单引号转义-使用参数化值

C# SQL Server查询中的单引号转义-使用参数化值,c#,sql,sql-server,C#,Sql,Sql Server,下面是我修剪过的C#: 我几乎可以输入任何东西,在输入数据库之前,某些特殊字符会被去掉,这对我来说很好,因为哪怕是一个简单的引用都会给工作带来麻烦。我尝试添加.Replace(“”,“”)添加到Comments变量,但这不会改变任何东西,我认为使用参数应该可以防止这种情况 我知道像这样的问题已经被问了很多次了,但到处都指向“使用参数!” 编辑:鉴于有四个人说了同样的话,我在这里一一作答。 我已经删除了@Comments周围的单引号,但问题完全相同。任何带有单引号的输入都不会输入到数据库中 在使

下面是我修剪过的C#:

我几乎可以输入任何东西,在输入数据库之前,某些特殊字符会被去掉,这对我来说很好,因为哪怕是一个简单的引用都会给工作带来麻烦。我尝试添加
.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}");