如果玩过Oracle都知道,存储过程基本都是通过游标返回数据的,但是dapper原生操作游标会报异常,具体异常信息因为现在没有环境就不截图了。
public FactoryPriceComparisonPublishItem GetTodayFactoryBasePricePushInfo(string weiXinId)
{
using (var cnn = Database.Connection("ERPDataBase"))
{
var p = new OracleDynamicParameters();
p.Add("V_WEIXINID", weiXinId);
p.Add("RetCursor", dbType: OracleDbType.RefCursor, direction: ParameterDirection.Output);
return cnn.Query("PKG_M_STEELMILL.GetFactoryPCPublishItem", param: p, commandType: CommandType.StoredProcedure).SingleOrDefault();
}
}
以上是实际项目的代码片段,通过游标获取查询数据。
那如何去解决这个游标问题呢?就是这个OracleDynamicParameters类,全部内容如下:
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Dapper;
using Oracle.DataAccess.Client;
public class OracleDynamicParameters : SqlMapper.IDynamicParameters
{
private static Dictionary> paramReaderCache = new Dictionary>();
private Dictionary parameters = new Dictionary();
private List