字符串包含引号字符(')

时间:2013-03-22 10:08:10

标签: c# .net sql-server

我有一个where子句的字符串,但该字符串包含引号character(')

示例:

SELECT * FROM CsCustomer WHERE Name ='SA'MIR LUBIS' 

我从sql server收到错误。有什么建议吗?

我用它将结果显示到表格单元格

c = new TableCell();
c.Text = Db.SingleString("SELECT Unit FROM cscustomer WHERE Name='"+ r.Name +"'");
tr.Cells.Add(c);

7 个答案:

答案 0 :(得分:9)

您应该使用参数化查询。您可以在查询'转义单引号(另一条单引号)

由于问题已使用C#标记,如果使用Concatenation构建查询,则必然会出现此类错误。如果您使用 SqlParameter,效果会更好 类似的东西:

SqlCommand cmd = new SqlCommand("SELECT * FROM CsCustomer WHERE Name =@pName");
cmd.Parameters.Add("@pName", "SA'MIR LUBIS"); //or any GUI control

这也可以帮助您免除SQL Injection

答案 1 :(得分:2)

如果它们不应该在那里,你需要加倍或删除它们。

SELECT * FROM CsCustomer WHERE Name ='SA''MIR LUBIS' 

答案 2 :(得分:2)

看一下SqlParameter课程。这样做:

var command = new SqlCommand("SELECT * FROM CsCustomer WHERE Name = @name");
command.Parameters.Add("@name", "SA'MIR LUBIS");

答案 3 :(得分:1)

在文字

中使用双引号('')

SELECT * FROM CsCustomer WHERE Name ='SA''MIR LUBIS'

答案 4 :(得分:1)

使用两个引号代替

SELECT * FROM CsCustomer WHERE Name ='SA''MIR LUBIS'

我还建议Use Parameters Instead of String Concatenation

答案 5 :(得分:1)

你只需要逃避单引号,如下:

SELECT * FROM CsCustomer WHERE Name ='SA''MIR LUBIS'

答案 6 :(得分:0)

使用它像:

"SELECT * FROM CsCustomer WHERE Name =\'SA\'MIR LUBIS\'"

或者:

@"SELECT * FROM CsCustomer WHERE Name ='SA'MIR LUBIS'"