zoukankan      html  css  js  c++  java
  • 工作流系统开发之二十四 如何构建支持多数据库的.net工作流系统

    主流数据库有,sqlserver,oralce,db2,mysql。
    产品级的.net工作流系统必须要能支持这多种数据库,同时还需要能方便的扩展支持新的数据库。
    在做数据库操作方面,java和.net的各不一样,java是利用jdbc的一套类库来做数据库的读写。但.net的就比较多了,微软提供的就有oledb,sqlclent,oracleClient,odbc等,还有一些第三方提供的访问类。

    所以在做多数据库支持方面,.net工作流系统,就需要考虑这些方式都支持,并且能很容易的切换。

                                                         C#数据库多种访问方式类框图

    首先按上面的类框图,设计好类接口关系。
    DbProvider:为数据库类实现方式的接口,提供有打开数据库,关闭,启事务,事务回滚,事务提交等方法。
    OleDbProvider:为oledb方式的连接数据库的实现类,实现DbProvider接口;
    OracleDbProvider: 为oralceClient方式的连接数据库的实现类,实现DbProvider接口。
    SqlDbProvider: 为SqlClient方式的连接数据库的实现类,实现DbProvider接口。

    DbProviderFactory:负责创建具体的实现类,根据传入的参数来创建具体的数据库操作实现类。
    Environment: 为需要获取数据库连接的类。

    具体的数据库连接参数,在bin\fcconfig.xml文件中,fcconfig.xml文件如下:

     

     
    第一个ds子节点为工作流系统的默认连接 (注:fcconfig.xml文件.net工作流系统和java工作流系统一致,只是具体的属性值设置不一样。)
    type属性="sqlclient" 则为使用SqlDbProvider类创建的DbProvider。
    type属性="oracleclient"则为使用OracleDbProvider类创建的DbProvider.
    type属性="oledb"则为使用OleDbProvider类创建的DbProvider.

    在对外的操作中屏蔽了sqlClient,OracleClient,oleDb等的差异。一个简单的使用实例如下:

       Environment env = new Environment(Session);
       DbProvider db = env.getDbProvider();
       env.beginTransaction();
       string sql="";

       sql = "insert into wf_user(user_id,user_code,user_name,user_password,user_status) ";
       sql +=" values('1','xx','xx','1','1')";
       db.ExecuteNonQuery(sql);

     
       sql ="select user_code,user_name from wf_user where user_id='1'" ;
       System.Data.IDataReader ds = db.ExecuteSqlReader(sql);
       if (ds.Read())
       {
        string usercode =(string)ds["user_code"];
        string username1 =(string)ds["user_name"];
       }
       ds.Close();

       sql ="delete from wf_user where user_id='1'" ;
       db.ExecuteNonQuery(sql);


       env.commitConnection();
       env.closeConnection();

    当如果没有写数据库操作时,则不需要env.beginTransaction();和   env.commitConnection();直接使用db就可以了。

  • 相关阅读:
    NodeJS学习笔记之Connect中间件应用实例
    NodeJS学习笔记之Connect中间件模块(二)
    NodeJS学习笔记之Connect中间件模块(一)
    前端构建工具gulpjs的使用介绍及技巧
    稳定的算法用于对象排序
    aspectJ
    SpringBoot自定义嵌入式Servlet容器
    一个对任务分而治之的java类ForkJoin详解
    VC6.0软件安装教程
    经典算法_杨辉三角,集合法
  • 原文地址:https://www.cnblogs.com/webreport/p/1799022.html
Copyright © 2011-2022 走看看