示例:
INSERT INTO table.Diagnosis([DESCRIPTION]) VALUES('person's')
如何插入?
答案 0 :(得分:6)
'Person's'
实际应该是'Person''s'
。 SQL Server认为字符串以第二个单引号结束,因此您必须使用其他引号“转义”它。
因此,您的代码as-is认为它正在尝试插入"Person"
以及此后对SQL Server乱码的任何内容。
您需要将语句修改为以下内容:
INSERT INTO table.Diagnosis([DESCRIPTION]) VALUES('person''s')
答案 1 :(得分:2)
因为您已将其标记为C#,我认为您希望通过代码设置此值 如果是这种情况,那么您可能有一个字符串连接,忽略单引号的存在。
像这样的东西
string descValue = "person's";
string cmdText = "INSERT INTO table.Diagnosis([DESCRIPTION]) VALUES(" + descValue +")";
要避免此问题,您应该使用像
这样的参数化查询string descValue = "person's";
string cmdText = "INSERT INTO table.Diagnosis([DESCRIPTION]) VALUES(@desc)";
using(SqlConnection cnn = new SqlConnection(connectionString))
using(SqlCommand cmd = new SqlCommand(cmdText, cnn))
{
cnn.Open();
cmd.AddWithValue("@desc", descValue);
cmd.ExecuteNonQuery();
}
使用参数化查询将作业转移到数据库引擎,现在可以正确地准备您的值,而不是盲目地运行sql 。对于其他类型的值(如小数和日期)也是如此。最后但同样重要的是,参数化查询是避免Sql Injection attack
的唯一方法答案 2 :(得分:1)
使用额外的单个
逃脱单引号INSERT INTO table.Diagnosis([DESCRIPTION]) VALUES('person''s')