• 我的WCF项目系列之四WCF Oracle数据库应用


    Oracle数据库调用就是一门复杂的课程啦,我这里只写在WCF中的应用。

    我看到有的人在写中间层调用数据库时,单把数据库调用作为一个服务来发布,仅仅是一个远程函数,上传一个Sql+参数列表,返回一个数据集,其他所有逻辑都在客户端编写应用,这就完成一个系统的开发啦。

    我觉得这种方式太狭隘啦,完全抛弃了面向对象开发的思想,又回到面向过程的开发啦。我的方式是自己写类,在类中包含属性,在服务端执行Sql结果都写到类中,再返回类,这种方式在下一篇中再介绍,这里只写数据库。

    在我刚学习时用的vs2003,那是还有OracleConnection等一些.Net内置的Oracle专用类库,在VS2008时,就找不到啦,我一直用的OleDB类库。

    1. 连接字符串Provider=OraOLEDB.Oracle;Password=***;Persist Security Info=true;User ID=***;Data Source=***

    2. 前期是自己写的SqlHelp,后来用的EntLib,微软企业库,现在是5版本啦。

    3. 调用的基本方式是

    public virtual bool boExecuteSql(string strSql, string[] _parameterS, string strDBConString, DataSet dsDBRe)

    {

    Boolean boResult;

    //

    int intDiv;

    intDiv = _parameterS.Length % 2;

    if (intDiv > 0)

    {

    boResult = false;

    return boResult;

    };

    try

    {

    using (SFCDBCon = new OleDbConnection(strDBConString))

    {

    OleDbDataAdapter empS = new OleDbDataAdapter(strSql, SFCDBCon);

    int countParameter = _parameterS.Length / 2;

    OleDbParameter[] myOleParameterS = new OleDbParameter[countParameter];

    for (int i = 0; i < countParameter; i++)

    {

    if (_parameterS[i * 2 + 1].Trim().Length > 0)

    {

    myOleParameterS[i] = new OleDbParameter(_parameterS[i * 2], _parameterS[i * 2 + 1]);

    empS.SelectCommand.Parameters.Add(myOleParameterS[i]);

    }

    }

    SFCDBCon.Open();

    empS.Fill(dsDBRe, "myTB");

    }

    boResult = true;

    }

    catch (System.Exception e)

    {

    string eMsg = e.Message;

    boResult = false;

    }

    //

    return boResult;

    }

    4. 在连接Oralce是一定要牢记,要释放Oracle连接。如果不释放,Oracle就会产生许多空链接,直到连接数满。用Using()语法就简单啦,不用手动释放。

    5. 在就是参数的应用。在Delphi中数据库控件可以自动感应Sql中包含的参数,单OldDb不能自动感应,必须手工建立参数并赋值

    6. 调用存储过程,因为参数是相对固定的,我采用的方法是预先从Oracle系统表中求出参数。

    SELECT OBJECT_NAME,ARGUMENT_NAME,POSITION,DATA_TYPE,IN_OUT FROM USER_ARGUMENTS WHERE OBJECT_NAME = :procname ORDER BY POSITION

    7. EntLib的数据访问模块,操作Oracle数据库。

    8. 别忘异常处理。否则客户端报错,就不知道什么原因啦。其中又包括WCF的异常处理,和Oracle数据库操作的异常处理,分别有不同处理方式。

  • 相关阅读:
    考虑浏览器兼容的文件上传(IE8不支持FormData)
    IDEA tomcat 部署WEB项目
    如何在springcloud分布式系统中实现分布式锁?
    ABAP DEMO33 选择周的搜索帮助
    ABAP函数篇1 日期函数
    ABAP函数篇2 测试DATE_CONVERT_TO_FACTORYDATE
    增强篇7 判断标准屏幕能否做屏幕增强
    增强篇6 CMOD增强删除
    ABAP DEMO 年月的搜索帮助
    HoloLens开发手记-配置开发环境 Install the tools
  • 原文地址:https://www.cnblogs.com/cangfriend/p/1860687.html
Copyright © 2020-2023  润新知