2017-04-13 168 views
1

我有一个请求,带有参数列表的存储过程名称。它可以是任何SP,因此结果可以是任何事情的列表,这就是为什么我使用SqlList<object>ServiceStack OrmLite SqlList <object>

当我使用

return db.SqlList<object>(spName, cmd => 
        { 
         cmd.CommandType = CommandType.StoredProcedure; 
         if (parameters != null) 
         { 
          foreach (var p in parameters) 
          { 
           cmd.AddParam(p.Key, p.Value, ParameterDirection.Input); 
          } 
         } 
         cmd.CommandTimeout = 90; 
        }); 

我得到一个system.dynamic.expendo对象为:{[结果,1.7783336]} 在客户端,我想要得到的十进制值,但我挣扎...... 我在客户端上创建了一个具有小数属性“结果”的类,并尝试将其转换为它,但它不起作用。我尝试使用该字符串并使用FromJson进行转换,但它也不起作用...

回答

1

请参阅calling stored procedures with OrmLite的推荐API的文档。

返回类型需要匹配的存储过程返回,如果SP只返回一个小数,你应该是什么能够与访问它:

var result = db.SqlScalar<decimal>("EXEC MyProc @p1 @p2", new { p1, p2 }); 

或者,如果你不知道什么类型的它会作为回报,你可以使用object,如:

var result = db.SqlScalar<object>("EXEC MyProc @p1 @p2", new { p1, p2 }); 

如果它不返回一个裸体标结果,你需要相匹配的返回类型,如形状

var result = db.Single<List<object>>("EXEC MyProc @p1 @p2", new { p1, p2 }); 
:如果它返回一个单行您可以访问在 List<object>行值