3

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

例子:

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);
4

7 回答 7

9

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

由于问题已用 C# 标记,如果您使用串联构建查询,那么您一定会遇到此类错误。如果您使用 SqlParameter会更好, 例如:

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

这也将使您免于SQL 注入

于 2013-03-22T10:09:18.993 回答
2

如果它们不应该存在,您需要将它们加倍或删除它们。

SELECT * FROM CsCustomer WHERE Name ='SA''MIR LUBIS' 
于 2013-03-22T10:09:25.910 回答
2

看一下SqlParameter类。这样做:

var command = new SqlCommand("SELECT * FROM CsCustomer WHERE Name = @name");
command.Parameters.Add("@name", "SA'MIR LUBIS");
于 2013-03-22T10:11:23.987 回答
1

改用两个引号

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

另外我会建议使用参数而不是字符串连接

于 2013-03-22T10:10:01.240 回答
1

在文本中使用双引号 ('')

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

于 2013-03-22T10:08:59.750 回答
1

您只需要转义单引号,如下所示:

SELECT * FROM CsCustomer WHERE Name ='SA''MIR LUBIS'
于 2013-03-22T10:13:07.023 回答
0

像这样使用它:

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

或者:

@"SELECT * FROM CsCustomer WHERE Name ='SA'MIR LUBIS'"
于 2013-03-22T10:09:22.790 回答