最近在做关于ServiceStack.OrmLite调用存储过程时,有问题。发现ServiceStack.OrmLite不能调用存储过程,或者说不能实现我想要的需求。在做分页查询时,我需要传入参数传出参数。
ServiceStack.OrmLite 调用存储过程代码:
存储过程:usp_GetCarComponentsList
传入参数:@page,@limit
传出参数:@pageCount ,@totalCount
问题描述:参数传入在数据库中不能接收,不知道是写法问题,还是其他原因。即便传入能用,但是输出参数我该怎么接收?
var list = db.SqlList<Common_CarComponents_Params>("EXEC usp_GetCarComponentsList @page,@limit,@pageCount,@totalCount ", new { TrademarkId = TrademarkId, SubTrademarkId = SubTrademarkId, page = page, limit = limit, pageCount = 0, totalCount = 0 });
解决方案:使用Dapper的DynamicParameters用来实现就好办了。
1、步骤:
PM> Install-Package Dapper
已安装“Dapper 1.42”。
正在将“Dapper 1.42”添加到 Product.ServiceInterface。
已成功将“Dapper 1.42”添加到 Product.ServiceInterface。
代码:
var dynamicParameters = new DynamicParameters(); dynamicParameters.Add("@TrademarkId", TrademarkId); dynamicParameters.Add("@SubTrademarkId", SubTrademarkId); dynamicParameters.Add("@page", page); dynamicParameters.Add("@limit", limit); dynamicParameters.Add("@pageCount", dbType: DbType.Int32, direction: ParameterDirection.Output); dynamicParameters.Add("@totalCount", dbType: DbType.Int32, direction: ParameterDirection.Output); var list2 = db.QueryMultiple("usp_GetCarComponentsList", dynamicParameters, commandType: CommandType.StoredProcedure); var firstSet = list2.Read().ToList(); int pageCount = dynamicParameters.Get<int>("@pageCount"); int totalCount = dynamicParameters.Get<int>("@totalCount");
很明显这就是一个分页查询,接下来就不用说了。