sql ce escape '(одинарная кавычка) C # - PullRequest
4 голосов
/ 26 сентября 2010

Я пишу некоторый код для хранения имен в базе данных.Я ограничиваю имена только определенными персонажами, но фамилии являются проблемой.Поскольку у некоторых людей есть одинарные кавычки в их имени (например, О'Брайан), я должен разрешить это.Поэтому я написал регулярное выражение для замены слова «на», которое, как я предполагал, должно сделать «литерал».Это работает, поскольку замена идет, но это все еще отмечает конец строки, и я получаю ошибку

Произошла ошибка при разборе запроса.[Номер строки токена = 1, отклонение строки токена = 71, ошибка токена = Брайан]

Я понимаю ошибку, одинарная кавычка обозначает конец вводимой строки, оставляя оставшуюся часть строки Брайаном снаружи.цитаты.

Код, который я использую:

Regex reg = new Regex("\'");
firstName = reg.Replace(firstName, "\\'");
lastName = reg.Replace(lastName, "\\'"):

Затем запрос на выборку строится с помощью string.format

sqlInsertObj.CommandText = string.Format("INSERT INTO childNameId (childFName, childLName) VALUES ('{0}', '{1}')", fName, lName);
 sqlInsertObj.ExecuteNonQuery();

Это работает для любой записи, кроме случаев, когда естьцитата на имя.

1 Ответ

5 голосов
/ 26 сентября 2010

Лучше использовать параметризованные SQL-запросы, а не строить их с конкатенацией строк. Документацию и пример можно найти по адресу MSDN .

Если вы настаиваете на конкатенации строк, избегайте двойных одинарных кавычек вместо \.

firstName = firstName.Replace("'", "''" );
...