Проблемы с SQLite, экранирование определенных символов - PullRequest
2 голосов
/ 05 января 2011

Я работаю над своим первым приложением базы данных.Это приложение WinForms, написанное на C # с использованием базы данных SQLite.

Я столкнулся с некоторыми проблемами, когда при использовании апострофа мой запрос SQLite не выполняется.Вот структура моих запросов.

string SQL = "UPDATE SUBCONTRACTOR SET JobSite = NULL WHERE JobSite = '" + jobSite + "'";

Например, если в переменном jobSite используется апостроф, он компенсирует другие апострофы в команде и завершается ошибкой.

Так чтовопросы:

1.Как мне избежать символов, таких как апостроф и точка с запятой в приведенном выше примере запроса?

2.Какие персонажи мне нужно убежать?Я знаю, что должен избежать апостроф, что еще опасно?

Спасибо за вашу помощь!

Ответы [ 3 ]

4 голосов
/ 05 января 2011

Скорее используйте параметры

Существует предыдущий вопрос переполнения стека об этом

Добавление параметров в SQLite с C #

, если вам нужно большефункциональность вы также можете использовать Entity Framework

http://sqlite.phxsoftware.com/

Извините, что не знакомы с синтаксисом, но концепция должна быть такой же.Что-то вроде:

SQLiteCommand Command = "UPDATE SUBCONTRACTOR SET JobSite = NULL WHERE JobSite = @JobSite";
Command.Parameters.Add(new SQLiteParameter("@JobSite", JobSiteVariable));
command.ExecuteNonQuery();
2 голосов
/ 05 января 2011

чтобы избежать апострофа, добавьте еще один апостроф ...

, поэтому строка типа it's должна быть вставлена ​​как it''s

Вам также может потребоваться экранировать кавычки.Способ сделать это - использовать обратную косую черту в качестве escape-символа ...

примерно так ... 'and he said\"escape all those quotes\"'

Вам также следует остерегаться SQL-инъекций ... в зависимости отТип используемого вами языка программирования. Существуют различные функции, которые могут помочь очистить любой вредоносный код.

Учебное пособие по C # по SQL-инъекциям, например

1 голос
/ 05 января 2011

Вы никогда не должны объединять строки для построения запросов SQL для SQLite - или для любой другой базы данных SQL, если это возможно.Это делает ваш код хрупким и открывает потенциальные точки входа для инъекционных атак.

Правильный способ сделать это - использовать размещенные параметры .Такой подход устраняет необходимость громоздкой строковой фильтрации.Я не уверен, как это сделать в C # для SQLite, но любая приличная языковая привязка для SQLite должна позволять вам использовать размещенные параметры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...