首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL Server查询中的单引号转义-使用参数化值

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

Stack Overflow用户
提问于 2013-09-27 09:17:10
回答 5查看 2.2K关注 0票数 1

下面是我删减的C#:

代码语言:javascript
运行
复制
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,"''"),这是可行的,但我不明白为什么我必须这样做。

EN

回答 5

Stack Overflow用户

发布于 2013-09-27 09:21:11

你不需要单引号。

代码语言:javascript
运行
复制
command.CommandText = "Insert into Table (Comments)values(@Comments)";

好的,在hvd的评论之后,我读了一下,我看到这是通过执行sp_executesql来实现的。

解决这个问题的方法可以有以下几点:

代码语言:javascript
运行
复制
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();
票数 2
EN

Stack Overflow用户

发布于 2013-09-27 09:22:18

它应如下所示:

代码语言:javascript
运行
复制
cmd.CommandText = "INSERT INTO Table (Comments) VALUES(@Comments)"
票数 0
EN

Stack Overflow用户

发布于 2013-09-27 09:22:37

使用参数时不必转义单引号。

假设CommentsString类型,那么只需执行以下操作:

代码语言:javascript
运行
复制
command.CommandText = "Insert into Table (Comments)values(@Comments)";
command.Parameters.Add("@Comments", SqlDbType.VarChar).Value = Comments;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19047092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档