0

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

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

我使用nvarchar,varchar和所有内容,但未能存储包含消息的撇号。

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

4

4 回答 4

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

于 2012-11-11T14:55:56.917 回答
1

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

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

CREATE TABLE tblTEst( col1 NVARCHAR(50))

INSERT INTO tblTest
  (Col1)
SELECT 'John''s'
于 2012-11-11T14:55:44.340 回答
1

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

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

insert into foo (bar)
values
('John''s');
于 2012-11-11T14:55:56.047 回答
0

像这样在john & sCHAR(39)之间使用 :'john'+CHAR(39)+'s'

于 2012-11-11T14:52:03.247 回答