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         }

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

posted @ 2014-09-02 21:51  有没有人知道  阅读(365)  评论(0编辑  收藏  举报