Объект 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!