如何从SQL Server存储过程获取返回值到nHibernate?

xie*_*ils 2 sql-server nhibernate stored-procedures

1.Database平台:SqlServer

2.Data Access:nHibernate 1.2

现在我们需要通过nHibernate访问存储过程,如下所示:

ALTER PROCEDURE TestProc() 
 AS 
  BEGIN 
    Select * From User 
    Return 1234 
  END 
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过IQuery获取用户列表,并且我也想获得默认返回值"1234".

题:

  1. 如何获得此默认返回值?
  2. 如果不能直接得到它,我们可以通过输出参数得到值吗?

Roh*_*wal 9

NHibernate不允许您以这种方式使用存储过程.但它确实允许使用普通的旧ADO.NET API进行调用.该NHibernate的文件说,如果你想使用这些程序,您必须通过session.Connection执行它们.这是一个例子 -

ISession session = sessionFactory.GetSession();

using(ITransaction transaction = session.BeginTransaction())
{
   IDbCommand command = new SqlCommand();
   command.Connection = session.Connection;

   // Enlist IDbCommand into the NHibernate transaction
   transaction.Enlist(command);

   command.CommandType = CommandType.StoredProcedure;
   command.CommandText = "dbo.SetUserInfo";

   // Set input parameters
   var parm = new SqlParameter("@UserID", SqlDbType.Int);
   parm.Value = 12345;
   command.Parameters.Add(parm); 

   // Set output parameter
   var outputParameter = new SqlParameter("@Quantity", SqlDbType.Int);
   outputParameter.Direction = ParameterDirection.Output;
   command.Parameters.Add(outputParameter); 

   // Set a return value
   var returnParameter = new SqlParameter("@RETURN_VALUE", SqlDbType.Int);
   returnParameter.Direction = ParameterDirection.ReturnValue;
   command.Parameters.Add(returnParameter);

   // Execute the stored procedure
   command.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里找到更多细节 -

http://refactoringaspnet.blogspot.com/2009/06/how-to-use-legacy-stored-procedures-in.html