Dapper使用Oracle游标

假如想象 提交于 2019-11-28 05:12:26

添加类:

public class RefCursor
{
    public static RefCursor Value = new RefCursor();

    private RefCursor()
    {

     }
}

public class RefCursorHandler : SqlMapper.ITypeHandler
{
    public void SetValue(IDbDataParameter parameter, object value)
    {
        OracleParameter oracleParameter = (OracleParameter)parameter;
        oracleParameter.OracleDbType = OracleDbType.RefCursor;
        oracleParameter.Direction = ParameterDirection.Output;
        parameter.Value = value;
    }

    public object Parse(Type destinationType, object value)
    {
        throw new NotImplementedException();
    }
}

使用之前:

SqlMapper.AddTypeHandler(typeof(RefCursor), new RefCursorHandler());

因为上面的代码只需要执行一次即可,建议在静态构造函数内运行

使用:

public virtual List<SampleListDto> GetSampleListByDapper(IPagedResultRequest paged, ref int total)
{
    var stored = "p_CReportRecognition";
    var parameter = new DynamicParameters();
    parameter.Add("p_pageSize", paged.PageSize);
    parameter.Add("p_pageIndex", paged.PageIndex);
    parameter.Add("p_RowsCount", total, DbType.Int32, ParameterDirection.Output);
    parameter.Add("cur_SysList", RefCursor.Value);//cur_SysList为游标名称

    using (IDbConnection _db = new OracleConnection(_connString))
    {
        var list = _db.Query<SampleListDto>(stored, parameter, null, false, null, CommandType.StoredProcedure).ToList();
        return list;
    }
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!