2010-05-11 2 views
1

J'ai la méthode suivante, au moment où il retourne la chaîne sql entière. Comment pourrais-je exécuter ce qui suit.comment appeler la chaîne sql de nhibernate

  using (ITransaction transaction = session.BeginTransaction()) 
      { 
       string sql = 
        string.Format(
         @"DECLARE @Cost money 
         SET @Cost = -1 
         select @Cost = MAX(Cost) from item_costings 
         where Item_ID = {0} 
         and {1} >= Qty1 and {1} <= Qty2 
         RETURN (@Cost)", 
         itemId, quantity); 

       string mystring = session 
        .CreateSQLQuery(sql) 
        .ToString(); 

       transaction.Commit(); 
       return mystring; 
      } 

// EDIT

ici est la version finale en utilisant des critères

using (ISession session = NHibernateHelper.OpenSession()) 
     { 
      decimal cost = session 
       .CreateCriteria(typeof (ItemCosting)) 
       .SetProjection(Projections.Max("Cost")) 
       .Add(Restrictions.Eq("ItemId", itemId)) 
       .Add(Restrictions.Le("Qty1", quantity)) 
       .Add(Restrictions.Ge("Qty2", quantity)) 
       .UniqueResult<decimal>(); 
      return cost; 
     } 

Répondre

3

NHibernate ne supporte que la lecture des résultats des lecteurs de données.

Vous devez créer votre chaîne de requête comme:

string sql = string.Format(
        @"select MAX(Cost) from item_costings 
         where Item_ID = {0} 
         and {1} >= Qty1 and {1} <= Qty2", 
         itemId, quantity); 

Et puis vous exécutez avec:

string mystring = session 
    .CreateSQLQuery(sql) 
    .UniqueResult<decimal>() 
    .ToString(); 

Quoi qu'il en soit, vous ne l'utilisez la fonctionnalité NHibernate tout ici, vous êtes juste inutilement enveloppant ADO.NET brut. Pourquoi ne pas définir un modèle d'objet et l'interroger à l'aide de critères, HQL ou Linq?

+0

merci diego, fini par prendre votre avis et le faire correctement. – frosty

Questions connexes