zoukankan      html  css  js  c++  java
  • 用Enterprise Library January 2006 的Data Access Application Block 访问Oracle存储过程心得

    在.NET中访问Oracle的方式有很多,配置成ODBC、OLEDB、OracleClient,当然配置成OracleClient是最高效的,还有一种方式是通过Enterprise Library 来访问,EL使用反射原理,最后还是用的OracleClient。
            用OracleClient访问Oracle存储比较简单,原因很简单:System.Data.OracleClient 中所有方法都是专门对于Oracle来写的,充分体现了Oracle的特点,使用起来非常简单,在MSDN中有比较详细的例子。
            在大量最佳实践的基础上,微软社区上出现了Enterprise Library这个东东,它在.NET的各个数据访问提供程序基础上用类工厂的原理进行动态组装,可以使程序动态配置而不用编译源代码。
            DAAB在SQL Server上使用起来相当方便,但是用在Oracle上有些技巧,这是Oracle和SQL Server有些不同点造成的,在Oracle中过程返回一个结果集的时候与SQL Server做法有很多的不同,我的上一篇文章说明这点。
            1、创建一下过程:
    读取信息

    2、执行一下C#代码就可以将SP中的结果集返回
    1DbCommand dbCmd = db.GetStoredProcCommand("pkgENTLIB_slope.ENTLIB_slope");
    2return db.ExecuteDataSet(dbCmd);
    说明:以上SP代码若是将"cur_OUT"改成其他的C#代码执行报错,为什么?
    看看EL中的源代码你就会清楚:
    Executes a command and returns the results in a new
    PrepareCWRefCursor
    QueryProcedureNeedsCursorParameter

    EL将cur_OUT写死在代码中了,判断SP中是否有Cursor类型的参数,有则对其赋值,本人写的代码刚好与之吻合(此处的吻合不是碰巧的!! ^_^),而且刚好只有一个Cursor类型的,所以运行通过了。
    写死带来一个问题,若是要一次查询返回多个结果集,一个cur_OUT肯定解决不了问题的,此时得退一步要将DbCommand换成OracleCommand就可以解决问题了,OracleCommand对象的Parameters可以用Add添加 OracleType.Cursor类型的参数到存储过程中,再用DataBase.ExecuteDataSet(OracleCommand),就可以返回结果集,这时返回的结果集可以多个,问题得以解决!!!

    不知道高手们有什么其他的高见,请明示!
  • 相关阅读:
    Sql in VBA 之 初识ADO
    Excel读取Word Table元素
    工作表是否已存在函数
    按模板生成工作表
    多层字典对象应用案例分析
    字典的应用
    字典的基本功能
    Dictionary 对象
    File System Object(FSO对象)B
    File System Object(FSO对象)A
  • 原文地址:https://www.cnblogs.com/weiweictgu/p/569014.html
Copyright © 2011-2022 走看看