Руководство по работе с БД Firebird с использованием библиотеки ADO .Net 2.0


Специальная поддержка DML (Data Manipulation Language)


Во второй версии Firebird появилось несколько нововведений. Одно из них это инструкция EXECUTE BLOCK. Она позволяет выполнить блок инструкций на стороне сервера, фактически это виртуальная хранимая процедура. Следующий пример демонстрирует использование ресурсов сервера базы данных для выполнения простого арифметического действия:

public void ExecuteBlockSQLTest() { OleDbConnection con = OpenFB2Connection(); OleDbTransaction trans = con.BeginTransaction();

//текст команды

string execute_block_data = "EXECUTE BLOCK (X INTEGER = :X) \n" + "RETURNS (Y INTEGER) \n" + "AS \n" + "BEGIN \n" + " Y = X * 2; \n" + "SUSPEND; \n" + "END \n";

//входящий параметр

int in_parameter_X = 2;

OleDbCommand cmd = new OleDbCommand(execute_block_data, con, trans); cmd.Parameters.AddWithValue("X", in_parameter_X);

//выполнение команды EXECUTE BLOCK

Assert.AreEqual((int)cmd.ExecuteScalar(), in_parameter_X * 2); trans.Commit();

con.Close(); }

Еще одно новшество, которое подарил нам FB2, это инструкция INSERT RETURNING. Фактически она позволяет выполнить операцию вставки данных и прочитать значения, которые были добавлены в процессе этой операции. Это особенно актуально для получения значения идентификатора новой записи, для которого использовался генератор:

public void InsertReturning() { OleDbConnection con = OpenFB2Connection(); OleDbTransaction trans = con.BeginTransaction();

//новая команда INSERT RETURNING OleDbCommand cmd = new OleDbCommand( "insert into customer (cust_no, customer) \n" + "values(GEN_ID(CUST_NO_GEN,1),:customer_name) \n" + "RETURNING cust_no",con,trans);

cmd.Parameters.AddWithValue("customer_name", "New customer"); //добавляем один выходной параметр

cmd.Parameters.Add("customer_no", OleDbType.Integer) .Direction =ParameterDirection.Output;

Assert.AreEqual(1, cmd.ExecuteNonQuery());

//удаляем запись, используя значение генератора, полученного //через INSERT ..


Начало  Назад  Вперед