Объект Cоmmand. Свойства, методы, примеры использования.



Класс Command позволяет выполнить SQL-оператор любого типа (Create, Select, Update, Delete):  

SqlCommand com = new SqlCommand("Select * from Customer", con);

Для выполнения оператора надо указать тип команды:

§ Text– Команда будет выполнять прямой оператор SQL. Оператор SQL указывается в свойстве CommandText. Это — значение по умолчанию.

§ StoredProcedure– Эта команда будет выполнять хранимую процедуру в источнике данных. Свойство CommandText представляет имя хранимой процедуры.

§ TableDirect– Команда будет опрашивать все записи таблицы. CommandText – имя таблицы, из которой команда извлечет все записи.

После того как заданы все параметры для объекта Command, его можно выполнить одним из 3-х методов:

§ ExecuteNonQuery()– Выполняет команды, отличные от SELECT, такие как SQL-операторы вставки, удаления или обновления записей. Возвращенное значение означает количество строк, обработанных командой. Также вы может использоваться для выполнения команд, которые создают, изменяют и уничтожают объекты базы данных;

§ ExecuteScalar()– Выполняет запрос SELECT и возвращает значение первого поля первой строки из набора строк, сгенерированного командой. Обычно применяется при выполнении агрегатной команды SELECT (вроде COUNT() или SUM() и др.);

§ ExecuteReader()– Выполняет запрос SELECT и возвращает объект DataReader, который является оболочкой однонаправленного курсора, доступного только для чтения.

Примервыполнениякоманды:

SqlDataReaderreader = com.ExecuteReader();

С-ва:

CommandText хранит текст запроса SQL или имя серверной процедуры.

CommandTimeout задает время ожидания ответа

Выполнение параметризованных команд с использованием объекта Command. Атака внедрением.

 

protectedvoidcmdGetRecords_Click(objectsender, EventArgse)

{

StringconnectionString = WebConfigurationManager.ConnectionStrings["Northwind"].ConnectionString;

   SqlConnection con = new SqlConnection(connectionString);

// Получить заказы по идентификатору заказчика

stringsql =

"SELECT Orders.CustomerID, Orders.OrderID, COUNT(UnitPrice) AS Items, " +

       "SUM(UnitPrice * Quantity) AS Total FROM Orders " +

       "INNER JOIN [Order Details] " +

       "ON Orders.OrderID = [Order Details].OrderID " +

       "WHERE Orders.CustomerID = '" + txtID.Text + "' " +

       "GROUP BY Orders.OrderID, Orders.CustomerID";

   SqlCommand cmd = new SqlCommand(sql, con);

con.Open();

   SqlDataReader reader = cmd.ExecuteReader();

   GridView1.DataSource = reader;

GridView1.DataBind();

reader.Close();

con.Close();

}

Атакивнедрением:

Вот что пользователь может ввести в текстовом поле, чтобы осуществить более изощренную атаку внедрением SQL, удалив все строки в таблице Customers:

ALFKI‘); DELETE * FROM Customers-- -

; – граница начала нового оператора

-- - комментирует оставшуюся часть оператора.

Что бы избежать этой опасности, нужно использовать параметры.

Параметризованная команда– это просто команда, которая использует символы-заполнители в тексте SQL. Заполнитель указывает место для динамически применяемых значений, которые затем пересылаются через коллекцию Parameters объекту Command.

Например, следующийоператор SQL:SELECT * FROM Customers WHERE CustomerID = 'ALFKI‘долженстатьчем-товроде:SELECT * FROM Customers WHERE CustomerID = @CustID

@CustID значение будет считаться единым целым, независимо от того, что ввел пользователь.

У класса Command есть коллекция Parameters, через которую реализуется передача параметризированных команд на сервер:

SqlCommand com = new SqlCommand("Select CityName from City where CountryID = (select CountryID from Country where CountryName = @Name)", con);

com.Parameters.AddWithValue("@Name", CountryName);

Такой оператор гарантированно избежит SQL инъекции.

 


Дата добавления: 2018-05-02; просмотров: 288; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!