首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我想将撇号存储在消息框中,例如john的watch.It show erreor near

我想将撇号存储在消息框中,例如john的watch.It show erreor near
EN

Stack Overflow用户
提问于 2012-11-11 22:46:18
回答 4查看 414关注 0票数 0

请帮我存储撇号。我正在创建一个网站(C#,.net,SQL Server),并希望为用户提供一个消息框,但问题是,当我插入任何消息,如John's,它会在''s'附近显示错误。

请告诉我如何在数据库中存储撇号

我使用了nvarcharvarchar和所有的东西,但未能存储包含消息的撇号。

一般的解决方案是用双撇号编写消息,但这不是网站的解决方案

EN

回答 4

Stack Overflow用户

发布于 2012-11-11 22:55:57

您已为SQL-Injection打开。不要通过连接字符串来构建查询。请改用SQL-Parameters。这也使您的代码更具可读性,并防止出现类似您的错误。

下面是一个例子:

代码语言:javascript
运行
复制
int amt;  
using (var con = new SqlConnection(ConnectionString)) {
    var sql = "INSERT INTO dbo.Message(UserID, Message) VALUES(@UserID, @Message);";
    using (var cmd = new SqlCommand(sql, con)) {
        cmd.Parameters.AddWithValue("@UserID", userID); // passed as argument
        cmd.Parameters.AddWithValue("@Message", txtMessage.Text); // f.e. "John's"
        con.Open();
        int inserted = cmd.ExecuteNonQuery();
    }
}

这同样适用于其他sql,比如UPDATE命令。

票数 4
EN

Stack Overflow用户

发布于 2012-11-11 22:55:44

问题是你需要用另一个Apostrophe来避开Apostrophe。

例如,看一下:http://sqlfiddle.com/#!3/d2f75/1

代码语言:javascript
运行
复制
CREATE TABLE tblTEst( col1 NVARCHAR(50))

INSERT INTO tblTest
  (Col1)
SELECT 'John''s'
票数 1
EN

Stack Overflow用户

发布于 2012-11-11 22:55:56

最好的解决方案是使用预准备语句(或C#中的任何等效语句),其中SQL只包含占位符,而您通过不同的方法传递实际值。

在字符文字中,单引号'只需将其加倍即可使用:

代码语言:javascript
运行
复制
insert into foo (bar)
values
('John''s');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13332183

复制
相关文章

相似问题

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