Реклама:

sqlConnection1.Close();

5.1.8. Выполнение команд, не возвращающих результата

Ряд запросов выполняют какие-либо действия над записями источника данных и не возвращают никакого результата. Таковы, например, запросы, использующие операторы INSERT, UPDATE, DELETE, CREATE TABLE и пр.

Команды, содержащие такие запросы, выполняются методом

public int ExecuteNonQuery();

который возвращает число записей, затронутых запросом.

Пример. Пусть процедура vz_IncKode изменяет значение столбца KP таблицы Prep:

CREATE PROCEDURE vz_IncKode

AS

UPDATE Prep SET KP = KP + 1

Пусть в приложении создан объект типа SqlCommand с именем sqlIncKode. Пусть эта команда ссылается на соединение sqlConnectionl (объект типа SqlConnection) и свойство sqlIncKode.CommandText содержит вызов процедуры: "[vz_IncKode]". Выполним команду и выведем в информационное окно записей, измененных в результате ее выполнения:

int nAffectedRows; //число затронутых записей //---откроем соединение

if (sqlConnectionl.State == ConnectionState.Closed)

{

sqlConnectionl.Open();

}

//---выполним команду и получим число затр. записей

nAffectedRows = (int)sqlIncKode.ExecuteNonQuery(); //---выведем число затр. записей

MessageBox.Show("Изменено " + nAffectedRows.ToString() + " записей");

//---закроем соединение

sqlConnectionl.Close();

_I

В ряде случаев, например при изменении структуры таблиц базы данных, получение числа затронутых записей бессмысленно. Тогда результат, возвращаемый методом ExecuteNonQuery, попросту не используют.

Пример. Пусть команда sqlCrTable ссылается на соединение sqlCon-nection1 (объект типа SqlConnection) и содержит в свойстве CommandText запрос на создание таблицы вида

CREATE TABLE XXX (A int, B nvarchar(10),PRIMARY KEY(A)).

Выполнение команды происходит следующим образом:

//---откроем соединение

if (sqlConnection1.State == ConnectionState.Closed)

{

sqlConnection1.Open();

}

//---выполним команду

sqlCrTable.ExecuteNonQuery();

//---сообщим о выполнении

MessageBox.Show("Готово ");

//---закроем соединение

sqlConnection1.Close();

5.1.9. Вызов функций

Команды данных могут использоваться для вызова функций SQL Server. Вызов функций ничем особым не отличается от вызова процедур, за исключением того, что параметры функции приходится задавать вручную. Впрочем, этого можно избежать, если при задании функции в диалоге (он появляется при нажатии кнопки эллипса в тексте свойства CommandText команды) явно задать имена параметров. В этом случае будет сгенерирована коллекция Params, содержащая нужное число параметров. Однако их типы входящих придется уточнить.

Пример. Пусть в базе данных задана функция

CREATE FUNCTION vz_FPrepPar (@nKK int) RETURNS TABLE

AS

RETURN

SELECT * FROM PREP WHERE KK = @nKK

Создадим в приложении команду данных - объект типа SqlCommand, перейдем в окно свойств и в поле значения свойства CommandText нажмем кнопку эллипса. В появившемся окне Add Table перейдем на закладку Functions, где из списка выберем имя функции - FPrepPar, после чего нажмем кнопки Add и Close. В окне диалога Query Builder появится выбранная функция (рис. 5.7).


⇐ Предыдущая страница| |Следующая страница ⇒