С#. Queries with params

Ранее для отправки запросов мы напрямую добавляли данные в выражение sql. Например, для отправки запроса на добавление данных в БД применялось следующее выражение:

В данном случае предполагается, что значения для переменных name и age вводит пользователь.

Что если переменная name получит следующее значение:

В этом случае sql-выражение в итоге будет выглядеть следующим образом:

В итоге в базу данных будет добавлено два объекта. Это относительно безобидный вид подмены sql-выражения, но реальные возможности встраивания зловредных скриптов таковы, что можно вообще потерять данные в БД, если предоставить пользователям подобным образом добавлять данные.

Чтобы выйти из этой ситуации, в sql-командах используются параметры:

Для определения параметров используется объект SqlParameter. Этот объект имеет ряд конструкторов, но в данном случае передается название параметра и его значение. Причем название параметров начинается со знака @ и должно совпадать с тем названием, которое используется в sql-выражении (то есть в “INSERT INTO Users (Name, Age) VALUES (@name, @age)”). После определения параметра он добавляется в коллекцию параметров команды.

При выполнении команды на место параметров в sql-выражении подставляются их значения. При этом не важно, что параметр @name в значении определяет еще одну команду INSERT – все его значение будет добавлено в столбец name в таблице Users.

This entry was posted in C#. Bookmark the permalink.