我想把撇号存放在诸如约翰的手表之类的消息框中。它显示了附近的错误

时间:2012-11-11 14:46:18

标签: c# asp.net sql-server

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

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

我使用了''s'nvarchar以及一切但未能存储包含消息的撇号。

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

4 个答案:

答案 0 :(得分:4)

您对SQL-Injection开放。不要连接字符串来构建查询。而是使用SQL-Parameters。这也使您的代码更具可读性并防止像您这样的错误。

以下是一个例子:

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命令。

答案 1 :(得分:1)

问题是你需要通过另一个撇号来逃避撇号。

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

CREATE TABLE tblTEst( col1 NVARCHAR(50))

INSERT INTO tblTest
  (Col1)
SELECT 'John''s'

答案 2 :(得分:1)

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

在字符文字中,单引号'可以通过简单加倍来使用:

insert into foo (bar)
values
('John''s');

答案 3 :(得分:0)

john &之间使用CHAR(39) s 喜欢这样:'john'+CHAR(39)+'s'