2011-06-03 174 views
2

所以我有一个经销商名称的列表,我在我的数据表中搜索它们 - 问题是,有些笑头被命名为'年轻' - 这会导致错误。如何从C#中的dataTable.Select()查询中去除单引号?

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 + "'"); 
       } 

任何人有任何好的想法?

谢谢! 托德

回答

4

您可以使用@操作符称为verbatim操作符,它表示拉丁文字面值。它不会对字符串中的字符进行任何解释,否则这些字符会意味着什么。

0

你需要躲避\dealerSearch.Replace("'", "\\'")(或使用@文字)

\被视为C#逃逸并没有出现在实际的字符串。

10

我通常使用双单引号表示一个即

DealerName = 'Young''s' 

试一下

+3

这是对我工作。 drs = dtDealers.Select(“DealerName ='”+ dealerName.Replace(@“'”,“''”)+“'”); 谢谢。 – 2011-06-03 00:28:49

3

最终你可能要考虑使用参数化查询。这将解决你的问题,还有一些你可能还没有想到的问题。我找到了this link,其中详细说明了原因和方式。

2

双单引号可以解决问题,但需要额外注意:您的“其他”块是多余的。

您可以通过这样完成同样的事情:

DataRow[] drs; 
       if (dealerName.Contains("'")) 
       { 
        string dealerSearch = dealerName; 
        dealerSearch = dealerSearch.Replace("'", "''"); 
       } 
       drs = dtDealers.Select("DealerName = '" + dealerName + "'"); 
+0

我不认为这是..我正在与经销商一起搜索如果我有一个单引号,但是如果我没有,则用dealerName搜索...我不想更改'dealerName'变量,因为我稍后使用它。 .. – 2011-06-03 00:31:27

+0

您不需要更改dealerName,并且此答案中的if块也是多余的。您可以*始终*使用dealerSearch作为条件,因为如果名称不包含单引号字符,则替换函数将仅返回未修改的字符串。这会让你的代码更简单。查看CharithJ的答案 – phoog 2011-06-03 03:39:51

1
drs = dtDealers.Select("DealerName = '" + dealerName.Replace("'", "\\'") + "'");