【问题标题】:ServiceStack OrmLite SqlList<object>ServiceStack OrmLite SqlList<object>
【发布时间】:2017-04-14 12:09:08
【问题描述】:

我有一个带有参数列表的存储过程名称的请求。它可以是任何 SP,因此结果可以是任何内容的列表,这就是我使用 SqlList&lt;object&gt; 的原因。

当我使用时

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 对象:{[result, 1.7783336]} 在客户端,我想获得十进制值,但我很挣扎...... 我在客户端上创建了一个具有小数属性“结果”的类,并尝试转换为它,但它不起作用。我试图获取该字符串并使用 FromJson 对其进行转换,但它也不起作用......

【问题讨论】:

    标签: servicestack ormlite-servicestack


    【解决方案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 });
    

    如果它不返回裸标量结果,则需要匹配返回类型的形状,例如如果它返回单行,您可以通过以下方式访问 List&lt;object&gt; 中的行值:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-19
      • 2022-01-18
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多