Замена апострофа в asp.net для предотвращения ошибки SQL - PullRequest
4 голосов
/ 19 сентября 2011

У меня есть веб-форма с полем имени, которое я хочу иметь возможность принимать одиночные апострофы, такие как имя O'Leary, но при попытке отправить эту запись на сервер SQL 2005 я получаю сообщение об ошибке,Мой вопрос не в этом.Дело в том, что когда я пытаюсь вставить запись в БД, используя это утверждение ...

Dim acctName As String = Replace(txtName.Text, "'", "''")

, я получаю O''Leary в базе данных вместо O'Leary.Мысль SQL должна была рассматривать эти двойные апострофы как один апостроф ???

Ответы [ 4 ]

5 голосов
/ 19 сентября 2011

Вам лучше использовать параметризованные запросы.Они автоматически обрабатывают одинарные кавычки и лучше защищают вас от SQL-инъекций.

Вставка двойных одинарных кавычек (я правильно сказал?) - это способ экранирования данных.Это должно сработать, но это не лучшая практика.

См. Эту статью для более полного ответа:

http://msdn.microsoft.com/en-us/library/ff648339.aspx

То, что я предлагаю, это шаг 3.

Редактировать - мне лучше прочитать вопрос

Если вы уже используете параметризованные запросы, или хранимая процедура, и выустановив значение acctName равным значению параметра, вам не нужно экранировать кавычки самостоятельно.Это обрабатывается автоматически.

Он также обрабатывается несколькими инструментами, включая библиотеку базы данных Mirosoft Patterns and Practices.В нем есть несколько команд, в которых вы можете передать оператор и массив объектов, которые используются в качестве значений параметров - это также обрабатывает экранирование.

Если это так, вы можете полностью исключить строкукод, в котором вы заменяете значения.

1 голос
/ 19 сентября 2011

Зависит от того, как вы вставляете данные в базу данных.

Если вы используете динамический SQL и строите строку SQL самостоятельно, вы сами ответственны за удвоение кавычек. Но если вы используете параметризованный запрос (как и должно быть, и, вероятно, так и есть), то движок позаботится об этом за вас, и, если вы удвоите кавычки самостоятельно, вы получите удвоенные кавычки в базе данных.

Обратите внимание: если вы начали с динамического SQL и переключились на параметризованные запросы, эта проблема внезапно возникла бы во время внесения изменений.

1 голос
/ 19 сентября 2011

Вне зависимости, не зная слишком много подробностей, я бы порекомендовал проверить настройку SET QUOTED_IDENTIFIER на SQL Server. Более подробную информацию можно найти здесь . Позвольте мне знать, если это помогает.

0 голосов
/ 19 сентября 2011

Это сильно зависит от того, какой запрос вы на самом деле отправляете.Если вы отправите '', то это то, что будет сохранено.Вам нужно удвоить ', но по другим причинам (в основном, из-за безопасности, но, конечно, и из-за правильности синтаксиса).

Пожалуйста, отправьте код, который вы используете для отправки запроса.

...