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


Вызов хранимых процедур


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

  • хранимая процедура возвращает результирующее множество
  • результат выполнения хранимой процедуры помещается в OUT параметры команды

Для первого способа используется обычная SQL-инструкция:

select * from stored_procedure_name(…)

Результат её выполнения обрабатывается при помощи объекта OleDbDataReader:

public void StoredProcedureResultSetTest() { OleDbConnection con = ConnectionProvider.CreateConnection(); con.Open(); OleDbTransaction trans = con.BeginTransaction();

//select stored procedure in params OleDbCommand cmd_in_params = new OleDbCommand("select cust_no from CUSTOMER", con, trans);

//select mail label through the stored procedure

OleDbCommand cmd_stored_proc = new OleDbCommand("select * from mail_label(:cust_no)", con, trans);

//add one IN parameter cmd_stored_proc.Parameters.Add("cust_no", OleDbType.Integer);

//execure reader

using (OleDbDataReader rdr = cmd_in_params.ExecuteReader(CommandBehavior.CloseConnection)) { //for each customer No while (rdr.Read()) { cmd_stored_proc.Parameters["cust_no"].Value = rdr["cust_no"]; using (OleDbDataReader rdr_out = cmd_stored_proc.ExecuteReader()) { Console.WriteLine("Customer №" + rdr["cust_no"]); while (rdr_out.Read()) for (int i = 0; i < rdr_out.FieldCount; i++) Console.WriteLine(rdr_out.GetName(i) + "=" + rdr_out[i]);

Console.WriteLine(); }

}

} }

Второй способ – вызов хранимой процедуры через инструкцию:

execute procedure stored_procedure_name

Результат выполнения помещается в OUT параметры команды, которые предварительно необходимо создать:

public void StoredProcedureOUTParamsTest() { OleDbConnection con = ConnectionProvider.CreateConnection(); con.Open(); OleDbTransaction trans = con.BeginTransaction();

//select in params OleDbCommand cmd_in_params = new OleDbCommand("select cust_no from CUSTOMER", con, trans);

//STORED PROCEDURE

OleDbCommand cmd_stored_proc = new OleDbCommand("execute procedure mail_label(:cust_no)", con, trans);




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



Книжный магазин