Как я могу удалить одну цитату из запроса 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 и не отображается в реальной строке.

Другие вопросы по тегам