Nhibernate 存储过程获取返回值

  写在前面:因为项目使用ssh.net所以做着做着要调用存储过程,而且是有返回值的,按照以前的做法直接在参数里指定下就可以获取,但是在nhibernate里调用就有点陌生了,百度一下得出的结果有两种:第一种是用的配置反正就是各种配置,最后能实现。第二种跟以前比较接近但是不是完全符合,然后针对现有情况就改了一下现在代码如下

 1 #region ExecuteStoredProcForQuery

 2         public void ExcuteStoreProcForReturn(String spName, IList<param> param,out object result)

 3         {

 4             var session = _sessionFactory.OpenSession();

 5             IDbCommand cmd = session.Connection.CreateCommand();

 6             cmd.CommandText = spName;

 7             cmd.CommandType = CommandType.StoredProcedure;

 8             if (param.Count > 0)

 9             {

10                 foreach (ParamInfo info in param)

11                 {

12                     IDbDataParameter parameter = cmd.CreateParameter();

13                     parameter.ParameterName = info.Name; //

14                     parameter.Value = info.Value;

15                     if (info.Name == "@result")

16                     {

17                         parameter.Direction = ParameterDirection.Output;

18                     }

19                     cmd.Parameters.Add(parameter);

20                 }

21             }

22             IDbConnection conn = session.Connection;

23                 if (conn.State == ConnectionState.Closed)

24                 {

25                     conn.Open();

26                 }

27                 try

28                 {

29                     cmd.Connection = conn;

30 

31                     cmd.ExecuteNonQuery();

32                     var sqlParameter = cmd.Parameters["@result"] as SqlParameter;

33                     result = sqlParameter != null ? sqlParameter.Value : 5;

34                 }

35                 catch ( Exception ex)

36                 {

37                     result = 0;

38                 }

39             finally

40             {

41                 session.Connection.Close();

42             }

43 

44 

45 

46         }

如上就是调用存储过程方法,最大的问题是硬编码了参数是通过参数来控制是返回哪一个值的,在得到结果后倒是可以在我的转换之前就先判断类型,以此来得到有返回值的那个参数,然后再赋值。大家有需要自行参考,以上代码可以用。

你可能感兴趣的:(Hibernate)