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

  • Автор темы AnEi
  • Дата начала
A

AnEi

#1
в базе есть хранимая процедура
[codebox]ALTER PROCEDURE DEC_CREATENAGRUZ_KAF(
K_OTDELKAF INTEGER,
YEARZAJAVKA SMALLINT)
RETURNS (
K_OTDELF INTEGER,
N_OTDELF VARCHAR(80),
K_OTDELKF INTEGER,
N_OTDELKF VARCHAR(80),
NDISC VARCHAR(45),
SHIFR_ALL VARCHAR(100),
N_VOB VARCHAR(5),
SEM_ALL VARCHAR(100),
KLB_ALL INTEGER,
KLP_ALL INTEGER,
CGROUP_ALL INTEGER,
PGROUP_ALL INTEGER,
IGROUP_ALL INTEGER,
L_ALL INTEGER,
P_ALL INTEGER,
LAB_ALL INTEGER,
IND_ALL INTEGER,
KONT_ALL INTEGER,
ZAL_ALL INTEGER,
ZALD_ALL INTEGER,
EKZ_ALL INTEGER,
DIP_ALL INTEGER,
DR_ALL INTEGER,
KDZAL NUMERIC(15,2),
KZAL NUMERIC(15,2),
KEKZ NUMERIC(15,2),
KKONS NUMERIC(15,2),
KKOND NUMERIC(15,2),
KKONZ NUMERIC(15,2),
KKPR1_6 NUMERIC(15,2),
KKPR7_20 NUMERIC(15,2),
SROK NUMERIC(15,2))
AS
begin
k_otdelkf=k_otdelkaf;
select n_otdel from xotdel where k_otdel=:k_otdelkaf into :n_otdelkf;
For Select k_otdel, n_otdel
from xotdelshtat_fakult(cast('01.09.'||cast:)yearzajavka as varchar(4))as Date))
where kv_otdel=2
into :k_otdelf, :n_otdelf
do begin
For Select NDISC, SHIFR_ALL, N_VOB, SEM_ALL, KLB_ALL, KLP_ALL, CGROUP_ALL,
PGROUP_ALL, IGROUP_ALL, L_ALL, P_ALL, LAB_ALL, IND_ALL, KONT_ALL,
ZAL_ALL, ZALD_ALL, EKZ_ALL, DIP_ALL, DR_ALL, KDZAL, KZAL, KEKZ,
KKONS, KKOND, KKONZ, KKPR1_6, KKPR7_20, SROK
FROM DEC_CREATENAGRUZ:)k_otdelf, :k_otdelkaf, :yearzajavka)
into :NDISC, :SHIFR_ALL, :N_VOB, :SEM_ALL, :KLB_ALL, :KLP_ALL, :CGROUP_ALL,
:pGROUP_ALL, :IGROUP_ALL, :L_ALL, :p_ALL, :LAB_ALL, :IND_ALL, :KONT_ALL,
:ZAL_ALL, :ZALD_ALL, :EKZ_ALL, :DIP_ALL, :DR_ALL, :KDZAL, :KZAL, :KEKZ,
:KKONS, :KKOND, :KKONZ, :KKPR1_6, :KKPR7_20, :SROK
do begin
suspend;
end
end
end
^[/codebox]

она возвращает в out-параметры результаты несколько раз, в итоге получается таблица. подскажите, как ее правильно вызвать. пишу на языке C#
 
P
#2
из синтаксиса мне кажется что это процедура для серверов Firebird/InterBase
ее можно вызвать через провайдер Odbc следующим образом:
[codebox]
public DataSet GetDataSetFromDEC_CREATENAGRUZ_KAF()
{
DataSet ds = new DataSet();

//
string connStrSaoz = "Dsn=DatabaseDNS;Driver={Firebird/InterBase® driver};dbname=10.13.2.25:D:\ourwork\Database\DatabaseName.gdb;charset=NONE;uid=sysdba; Password=masterkey;";

OdbcConnection con = new OdbcConnection(connStrSaoz);

OdbcDataAdapter da = new OdbcDataAdapter("select * from DEC_CREATENAGRUZ_KAF", con);
da.SelectCommand.CommandType = CommandType.Text;

// Fill the DataSet.

try
{
con.Open();
da.Fill(ds);
}
catch (Exception)
{
throw new ApplicationException("Data error.");
}
finally
{
if (con.State == ConnectionState.Open)
con.Close();
}
return ds;
}[/codebox]