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

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);
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注入攻击。


我想将结果显示在表格单元格/文本框中。我该怎么做? - Firma Agnes
2
@FirmaAgnes 去找出来,SO 的理念是帮助解决特定问题,而不是完成整个任务。 - LukeHennerley
@FirmaAgnes,那是一个独立的问题。这还取决于你要开发什么类型的应用程序,但通常你可以使用DataGrid并绑定来自数据库的数据。如果你在某个地方遇到困难,你需要搜索相关信息,并回到SO寻求帮助。也许这个链接可以作为一个很好的起点:http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=111 - Habib
@Habib,抱歉,我认为我的问题已经完整了,请检查我的编辑后的问题。先谢谢了。 - Firma Agnes
@FirmaAgnes,我不确定你的方法Db.SingleString的实现方式。你可以使用简单的ADO.Net参数化查询,或者现在你可以尝试使用r.Name.Replace("'","''"),这将转义单引号,稍后你可以使用SqlParameter将代码转换。 - Habib

2

如果它们不应该在那里,你需要将它们重复或移除。

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

2

请查看SqlParameter类。操作步骤如下:

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

1

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

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


OP不想要引号 - 只需将 ' 加倍,而不是使用引号。 - LukeHennerley

1

1

您只需简单地转义单引号,像这样:

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

0

使用方法如下:

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

或者:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接