请帮我存储撇号。我正在创建一个网站(C#,.net,SQL Server),并希望为用户提供一个消息框,但问题是,当我插入任何消息,如John's
,它会在''s'
附近显示错误。
请告诉我如何在数据库中存储撇号
我使用了nvarchar
、varchar
和所有的东西,但未能存储包含消息的撇号。
一般的解决方案是用双撇号编写消息,但这不是网站的解决方案
发布于 2012-11-11 22:55:57
您已为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-11 22:55:44
问题是你需要用另一个Apostrophe来避开Apostrophe。
例如,看一下:http://sqlfiddle.com/#!3/d2f75/1
CREATE TABLE tblTEst( col1 NVARCHAR(50))
INSERT INTO tblTest
(Col1)
SELECT 'John''s'
发布于 2012-11-11 22:55:56
最好的解决方案是使用预准备语句(或C#中的任何等效语句),其中SQL只包含占位符,而您通过不同的方法传递实际值。
在字符文字中,单引号'
只需将其加倍即可使用:
insert into foo (bar)
values
('John''s');
https://stackoverflow.com/questions/13332183
复制相似问题