sql server中的噪音字符

时间:2014-09-15 17:28:04

标签: sql-server tsql

示例:

INSERT INTO table.Diagnosis([DESCRIPTION]) VALUES('person's')

如何插入?

3 个答案:

答案 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')