《.NET Core中使用OA信用盘源码下载Dapper操作Oracle存储过程最佳实践》由会员分享,可在线阅读,更多相关《.NET Core中使用OA信用盘源码下载Dapper操作Oracle存储过程最佳实践(4页珍藏版)》请在金锄头文库上搜索。
1、为什么说是最佳实践呢?OA信用盘源码下载,详情咨询【企娥166848365】因为在实际开发中踩坑了,而且发现网上大多数文章给出的解决方法都不能很好地解决问题。尤其是在获取类型为OracleDbType.RefCursor,输出为:ParameterDirection.Output数据的时候。网上千篇一律的说写一个OracleDynamicParameters的扩展。但是给出的代码OracleDynamicParameters中对于Get方法都没有贴出代码或者Get方法的书写存在一定的问题。这就导致了,如果你执行一个Oracle存储过程并且获取OracleDbType.RefCursor类型的输
2、出值的时候就会爆“OracleDbType无法转换成CLR类型”的问题。具体的异常提示这里就不截图了,大致就是需要进行一下OracleDbType到CLR类型的一个转换。Dapper的DynamicParameters不支持游标类型如果你用Dapper来进行Oracle的存储过程的操作,刚好这个存储过程需要传入一个游标类型的输出值,如下所示,你会发现在DbType中是不包含游标类型的。var p = new DynamicParameters();p.Add(foo, bar);p.Add(baz_cursor, dbType: DbType.?(没有游标类型) , direction: Pa
3、rameterDirection.Output);自定义OracleDynamicParameters来支持游标类型不知道大家还有咩有印象,我在2018年的时候曾经翻译了一篇关于在.NET Core中使用Dapper操作Oracle的文章,没有印象的可以点击链接查看下译ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了。这篇文章是翻译的,里面有一个OracleDynamicParameters的扩展方法的代码,具体的代码大家可以点击上面的链接进行查看,使用这个OracleDynamicParameters进行Oracle存储过程的查询是不会有问题的,而
4、且也支持包含OracleDbType.RefCursor类型的存储过程的执行。因为它在Add参数的时候传入的是数据类型是OracleDbType类型,如下所示:因此这里我们可以在添加参数的时候,传入游标类型了。如下所示:但是这时候,如果这个游标类型是输出参数,这时候你如果通过下面这种方式来直接获取的话,就会爆我们文章开头的错误了。异常的大概意思就是“返回的是OracleDbType类型,没法直接转换成CLR类型,如上面的int类型”。解决异常问题既然知道了异常的问题,那么接下来我们就需要解决这个问题了。大概的解决思路也就是重新实现下Get方案,在获取数据的时候执行下OracleDataType
5、到CLR类型的转换。可能这个对大伙有点难度,但是别担心,我们有GayHub,因此我在GayHub上果然找到了现成的实现,具体的代码可以点这里查看这里实现的OracleDynamicParameters比我们实现的更强大,功能也更丰富。同时也实现了Get方法的转换。如下图所示:同时,作者也发布了Nuget包,来让你远离996.使用方式如下:然后在文件中引入Dapper.Oracle的明明空间就可以了。同时此项目的GitHub地址有必要贴一下:https:/ Core中使用Dapper操作Oracle存储过程遇到的坑,同时给出了个人认为是最佳实现的解决方法。希望对大家有所帮助。Dapper是一个好的工具,可以让你编写高性能的数据库操作代码。但是,有时在对Oracle的支持上,可能有一些欠缺,这时候就有一批乐于分享,甘于贡献的编程爱好者来分享优秀的扩展来让我们远离996。