首先说明一下,实际的调用并不真正是nhibernate提供的功能。而只是入口处在nhibernate的SessionFactory,所以这个标题有点不太对题。
具体实现:
存储过程是oracle的,过程如下:
create or replace procedure TestAA(abc varchar2, ccd out varchar2, op out varchar2)
as
begin
insert into aa values(abc);
ccd := 'chang';
op := 'moring';
commit;
end;
C#调用代码如下:
public void MyProcExec(string str, out string ccd, out string op)
{
IDbCommand cmd = SessionFactory.OpenSession().Connection.CreateCommand();
cmd.CommandText = "testaa";
cmd.CommandType = CommandType.StoredProcedure;
IDbDataParameter p = cmd.CreateParameter();
IDbDataParameter p1 = cmd.CreateParameter();
IDbDataParameter p2 = cmd.CreateParameter();
p.ParameterName = "abc";
p.Value = str;
p1.ParameterName = "ccd";
p1.Size = 10;
p1.Direction = ParameterDirection.Output;
p2.ParameterName = "op";
p2.Size = 10;
p2.Direction = ParameterDirection.Output;
cmd.Parameters.Add(p);
cmd.Parameters.Add(p1);
cmd.Parameters.Add(p2);
cmd.ExecuteNonQuery();
ccd = p1.Value.ToString();
op = p2.Value.ToString();
//throw new NotImplementedException();
}
这种方法是在实在找不到nhibernate调用存储过程,得到返回值的情况下,同时在网上没有找到有效的解决办法的情况下,使用nhibernate的连接,自己创建命令来实现调用存储过程,达到多返回值的目的。