Выполнение запроса, не возвращающего записей
| Индекс материала |
|---|
| Выполнение запроса, не возвращающего записей |
| Страница 2 |
Запрос, не возвращающий набор результатов, обычно называется командным (action query). Этот термин я буду часто использовать в тексте. Основных видов командных запросов два: • DML-запросы (Data Manipulation Language, язык управления данными). Также называются обновлениями под управлением запросов (query-based updates. QBU), они изменяют содержимое БД. Вот пара примеров DML-запросов: UPDATE Customers SET CompanyName = 'NewCompanyName' WHERE CustomerlD = 'ALFKf INSERT INTO Customers (CustomerlD, CompanyName) VALUES ('NewID1, 'NewCustomer'} DELETE FROM Customers WHERE CustomerlD = 'ALFKI1 • DDL-запросы (Data Definition Language, язык определения данных). Эти запросы изменяют структуру БД: CREATE TABLE Tablel (Fieldl int NOT NULL CONSTRAINT PKJablel PRIMARY KEY, Field2 varchar(32)) ALTER VIEW Viewl AS SELECT Fieldl, Field2 FROM Tablel DROP PROCEDURE StoredProcedurel Для выполнения командного запроса создайте объект Command, задайте его свойству Connection активное подключение, свойству CommandText — нужную строку запроса и вызовите метод ExecuteNonQuery: Visual Basic.
NET Dim en As New OleDbConnectionO cn. ConnectionString = "Provider=SQLOLEDB;Data Source=(local)\NetSDK;" & "Initial Catalog=Northwind;Trusted_Connection=Yes;cn. Open() Dim cmd As OleDbCommand = cn.
CreateCommand() cmd. CommandText = "UPDATE Customers SET CompanyName = 'NewCompanyName'" & " WHERE CustomerlD = 'ALFKI'cmd, ExecuteNonQuery() Visual C#.NET OleDbConnection en = new OleDbConnectionO; cn. ConnectionString = "Provider=SQLOLEDB; Data Source=(local)\\NetSDK;" + "Initial Catalog=Northwind;Trusted_Connection=Yes;"; cn. Open(); OleDbCommand cmd = cn. CreateCommand(); cmd.
CommandText = "UPDATE Customers SET CompanyName = 'NewCompanyName' " + "WHERE CustomerlD = 'ALFKI1"; cmd. ExecuteNonQuery(); Выполнить командный запрос — только половина успеха. Например, следую щий запрос может выполняться как удачно, так и с ошибкой: CREATE TABLE NewTable (NewTablelD int NOT NULL CONSTRAINT PKJJewTable PRIMARY KEY, OtherField varchar(32)) Этот запрос либо успешно создает новую таблицу, либо возвращает ошибку изза существования одноименной таблицы, неверного синтаксиса запроса или отсутствия открытого соединения с БД. Смысл в том, что, если запрос выполнился успешно и не вернул ошибку, будет успешно создана новая таблица. В случае с командными запросами, изменяющими или удаляющими существующую запись, одного только успешного выполнения недостаточно. Еще раз рассмотрим запрос из фрагмента кода, который изменяет название компании конк ретного клиента: UPDATE Customers SET CompanyName = 'NewCompanyName' WHERE Customer = 'ALFKI' В некоторых случаях запрос не изменит название компании клиента — например, если нужная запись удалена из таблицы.
Запрос выполнится, но, поскольку ни одна запись БД не удовлетворяет критерию из раздела WHERE, запрос ничего не изменит. С точки зрения БД такой результат не означает ошибку. Так как же узнать, изменил ли запрос одну запись? Если вы выполняли запрос с помощью утилиты типа Microsoft SQL Server Query Analyzer, появится сообще ние, аналогичное следующему: (1 row(s) affected) Помните: если командный запрос не изменил какие-либо записи БД из-за того, что записи, удовлетворяющие критериям раздела WHERE, отсутствуют, запрос не возвращает ошибку. Объект Command сообщает о результатах выполнения запроса при помощи возвращаемого значения метода ExecuteNonQuery, которое содержит число обра ботанных записей: Visual Basic.
Основы работы с Microsoft ADO.NET
Использование поставщика данных .NET
Метео


