所以我有一个经销商名单列表,我在我的数据表中搜索它们 - 问题是,有些傻瓜被命名为'Young'' - 这会导致错误。
drs = dtDealers.Select("DealerName = '" + dealerName + "'");
所以我尝试更换字符串(虽然它对我没用 - 也许我不知道如何使用替换...)
DataRow[] drs;
if (dealerName.Contains("'"))
{
string dealerSearch = dealerName;
dealerSearch = dealerSearch.Replace("'", "\'");
drs = dtDealers.Select("DealerName = '" + dealerSearch + "'");
}
else
{
drs = dtDealers.Select("DealerName = '" + dealerName + "'");
}
有人有什么好主意吗?
谢谢! 托德
答案 0 :(得分:10)
我通常用双引号来表示一个,即
DealerName = 'Young''s'
试试
答案 1 :(得分:4)
您可以使用名为verbatim运算符的@运算符,这意味着拉丁语中的文字。它不会对字符串中的字符进行任何解释,否则就会产生某种意义。
答案 2 :(得分:3)
最终,您可能需要考虑使用参数化查询。这将解决您的问题以及您可能还没有想到的其他一些问题。我找到this link详细说明了原因和方法。
答案 3 :(得分:2)
双单引号将解决问题,但需要额外注意:您的“其他”块是多余的。
你可以通过这样做完成同样的事情:
DataRow[] drs;
if (dealerName.Contains("'"))
{
string dealerSearch = dealerName;
dealerSearch = dealerSearch.Replace("'", "''");
}
drs = dtDealers.Select("DealerName = '" + dealerName + "'");
答案 4 :(得分:1)
drs = dtDealers.Select("DealerName = '" + dealerName.Replace("'", "\\'") + "'");
答案 5 :(得分:0)
您需要转义\
:dealerSearch.Replace("'", "\\'")
(或使用@
字面值)
您的\
被视为C#转义符,不会出现在实际字符串中。