Використання команд, що параметризуються

Команда, що параметризується, - це звичайна SQL-команда, в тексті якої використовуються спеціальні символи, які указують місце для динамічної підстановки значень, що передаються об'єкту Command через колекцію Parameters. Наприклад, команда видалення запису з таблиці "Товари", використана вище, виглядатиме таким чином при використанні параметра:

DELETE FROM Товари WHERE НазваТовара = @productname

Тут @ProductName є параметром, значення якого має бути встановлене до того, як буде запущено виконання запиту. Синтаксис команд, що параметризуються, відрізняється в різних постачальниках даних. Наведений вище приклад справедливий для взаємодії з SQL Server. Для використання тієї ж команди при взаємодії з Access той же запит повинен виглядати таким чином:

DELETE FROM Товари WHERE НазваТовара=?

Текст програми, що реалізовує підключення до наборів даних SQL Serve і Access, установку значень параметрів запитів і їх виконання, приведений нижче.

OleDbConnection AccessCon=new OleDbConnection(strOleDbConnection);string strSQLServer = "DELETE FROM Товари WHERE НазваТовара = @productname";string strAccess = "DELETE FROM Товари WHERE НазваТовара =?";SqlCommand cmdDeleteSQLServer = new SqlCommand(strSQLServer,sqlCon);OleDbCommand cmdDeleteAccess=new OleDbCommand(strAccess,AccessCon);try{ cmdDeleteSQLServer.Parameters.Add("@ProductName" tb_Delete.Text); sqlCon.Open(); int n = cmdDeleteSQLServer.ExecuteNonQuery(); lbl_Delete.Text += String.Format("З бази даних SQL Server видалене {0} записів</br>",n); cmdDeleteAccess.Parameters.Add("ProductName", tb_Delete.Text); AccessCon.Open(); int del = cmdDeleteAccess.ExecuteNonQuery(); lbl_Delete.Text += String.Format("З бази даних Access видалене {0} записів</br>", del); }catch (Exception ex|){ lbl_Delete.Text += String.Format("Помилка: {0}</br>", ex.Message);}finally{ sqlCon.Close(); AccessCon.Close();}

Крім того, що робота із запитами, що параметризуються, простіше з погляду динамічного формування тексту самого запиту, вона ще забезпечує захист від атаки впровадженням SQL. Так, попередній приклад використання такої атаки в даному випадку не працює.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: