Как я могу удалить одну цитату из запроса dataTable.Select() в C#?
Итак, у меня есть список имен дилеров, и я ищу их в моей таблице данных - проблема в том, что какой-то хулиган ДОЛЖЕН быть назван "Янгом" - это вызывает ошибку.
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 + "'");
}
У кого-нибудь есть хорошие идеи?
Спасибо! Тодд
6 ответов
Вы можете использовать оператор @, называемый дословным оператором, что в переводе с латинского означает буквальное. Он не будет интерпретировать символы в строке, которые иначе что-то значат.
Я обычно использую двойные одинарные кавычки, чтобы обозначить один, т.е.
DealerName = 'Young''s'
Попробуй это
В конечном итоге вы можете рассмотреть возможность использования параметризованного запроса. Это решит вашу проблему и некоторые другие, о которых вы, возможно, еще не подумали. Я нашел эту ссылку, которая подробно описывает причины, почему и как.
Двойная одинарная кавычка решит проблему, но дополнительное примечание: ваш блок "else" является избыточным.
Вы можете сделать то же самое, выполнив это:
DataRow[] drs;
if (dealerName.Contains("'"))
{
string dealerSearch = dealerName;
dealerSearch = dealerSearch.Replace("'", "''");
}
drs = dtDealers.Select("DealerName = '" + dealerName + "'");
drs = dtDealers.Select("DealerName = '" + dealerName.Replace("'", "\\'") + "'");
Вам нужно сбежать \
: dealerSearch.Replace("'", "\\'")
(или используйте @
буквальный)
Ваш \
трактуется как C# escape и не отображается в реальной строке.