Реклама:
Шумаков П. В.  ADO.NET и создание приложений баз данных в среде Microsoft Visual Studio .NET. Руководство разработчика с примерами на C#.

рис. 5.7

Изменим сгенерированный текст запроса

SELECT vz_FPrepPar.*

FROM vz_FPrepPar() vz_FprepPar на

SELECT vz_FPrepPar.* FROM vz_FPrepPar(@KK)

и нажмем кнопку OK. После этого автоматически будет сгенерирована коллекция Params команды данных. В данном случае коллекция будет состоять из одного элемента. Желательно уточнить тип параметра в свойстве SqlDbType^K. 5.8).

Шумаков П. В.  ADO.NET и создание приложений баз данных в среде Microsoft Visual Studio .NET. Руководство разработчика с примерами на C#.

рис. 5.8

Если же функция не имеет параметров, то должно указываться только имя команды.

в свойстве CommandText команды

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

CREATE FUNCTION vz_FPrep () RETURNS TABLE

AS

RETURN SELECT * FROM PREP

В свойстве CommandText команды, вызывающей эту функцию на выполнение, должно содержаться следующее значение:

SELECT vz_FPrep.* FROM vz_FPrep()

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

Пример. Выполним функцию CREATE FUNCTION vz_FPrepPar (@nKK int)

RETURNS TABLE

AS

RETURN

SELECT *

FROM PREP

WHERE KK = @nKK

Для выполнения функции в приложении создадим объект типа SqlCommand с именем sqlFPar. Установим значение свойства CommandText этого объекта равным "SELECT vz_FPrepPar_1.* FROM vz_FPrepPar(@KK)". Коллекция Params команды будет содержать один элемент с именем @nKK. Ниже приводится код для вызова функции и помещения значений столбцов результирующих записей в элемент управления listBoxl.

if (sqlConnectionl.State == ConnectionState.Closed)

{

sqlConnectionl.Open();

}

System.Data.SqlClient.SqlDataReader dr; sqlFPar.Parameters["@nKK"].Value = 3; dr = sqlFPar.ExecuteReader(); listBoxl.Items.Clear(); while (dr.Read())

{

listBoxl.Items.Add(dr["FIO"].ToString() + (char)9 +

dr["Rank"].ToString());

}

sqlConnectionl.Close();

5.1.10. Команды данных и транзакции

Транзакции 1 реализуются классами:

• System.Data.SqlClient.SqlTransaction - при работе с SQL Server;

• System.Data.OleDb.OleDbTransaction - при работе с источниками данных OLE DB.

Объект транзакции возвращается методом BeginTransaction объекта соединения. Ссылку на полученный таким образом объект транзакции нужно занести в свойство Transaction команды данных:

public SqlTransaction Transaction {get; set;}

Теперь команда данных будет выполняться в контексте этой транзакции. Заметим, что в контекст транзакции может входит и одна команда, но, как правило, их несколько. После успешного выполнения всех команд, заданных в ее контексте, транзакция подтверждается методом Commit; если при выполнении хотя бы одной из команд произошел сбой, транзакция откатывается методом Rollback.

1 Более подробно о транзакциях в частности и конкурентном изменении данных вообще см. 6.2.

Пример. Пусть команда данных (объект типа SqlCommand) с именем cmdlns) содержит запрос вида

INSERT INTO lsh (nbsl, nbs2, nls, rdat, ccy, ccyost, rurost, client) VALUES (@nbs1, @nbs2, @nls, @rdat, @ccy, @ccyost, @rurost, @client)

и выполняет добавление записи в таблицу lsh. Эта таблица содержит сведения об остатках на лицевых счетах баланса банка.


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