Руководство по работе с БД 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);




    Содержание  Назад  Вперед