下面是我修剪过的C#:
thisConnection.Open();
string commandtext = "Insert into Table (Comments)values('@Comments')";
SqlCommand command = new SqlCommand(commandtext, thisConnection);
command.Parameters.Add("@Comments", SqlDbType.VarChar).Value = Comments;
command.ExecuteNonQuery();
thisConnection.Close();
我几乎可以输入任何东西,在输入数据库之前会删除某些特殊字符,这对我很好,即使只是一个单引号也会在工作中抛出一个扳手。我尝试将.Replace("'","''");
添加到Comments
变量,但这并没有改变任何内容,我使用参数应该可以防止这种情况发生。
我知道这样的问题已被问到很多,但到处都只是指向“使用参数!”
编辑:看到有四个人说了同样的话,我在这里回答这一切。
我删除了@Comments
周围的单引号,但问题完全相同。任何带单引号的输入都不会输入数据库。
我在使用javascript之前添加了.replace(/'/g,"''")
,这是有效的,但我不知道为什么我应该这样做。
答案 0 :(得分:2)
您不需要单引号。
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();
答案 1 :(得分:0)
应如图所示:
cmd.CommandText = "INSERT INTO Table (Comments) VALUES(@Comments)"
答案 2 :(得分:0)
使用参数时,不必转义单引号。
假设Comments
是String
类型,那么就这样做:
command.CommandText = "Insert into Table (Comments)values(@Comments)";
command.Parameters.Add("@Comments", SqlDbType.VarChar).Value = Comments;
答案 3 :(得分:0)
"Insert into Table (Comments)values('@Comments')";
应该是
"Insert into Table (Comments)values(@Comments)"; <-- no single quotes
人们建议您使用parameters
的原因是为了避免SQL injection
。看看Bobby Tables
。
答案 4 :(得分:0)
我已经尝试过类似的方法,但没有遇到任何异常,但对于SQL注入来说可能并不安全。
Comments.Replace("'", $"{(char)39}");