webreport

博客园 首页 新随笔 联系 订阅 管理

主流数据库有,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就可以了。

 

 

 

posted on 2010-08-13 14:51  web报表  阅读(6519)  评论(4编辑  收藏  举报