zoukankan      html  css  js  c++  java
  • 利用反射来实现多数据库访问

    最近公司做工商外资的项目,要求使用DB2数据库与Oracle数据库切换。需求是只要把webconfig中的配置一改就可以实现数据来源在DB2与Oracle之间切换。经过思考,觉得可以用抽象工厂来实现这一功能,后边仔细一想,感觉有点麻烦,后边想到了用反射来实现。思路是这样的:将数据访问层抽取出来,提取成接口DomeIDAL类库,再不同的数据库建立不同的数据访问层实现接口,如使用DB2话就对应有一个DB2的数据访问类库项目DBTwoDAL,里面的类对应实现DemoIDAL中的接口,oracle有OracleDAL数据访问类库对应,这样将不同的数据库的访问抽取出来。然后再见一个反射工厂DemoFactory,用来创建不同的数据访问对象,实现是这样的,在webconfig中配置要使用的数据访问层的程序集名称,如使用oracle的话,就配OracleDAL,然后在发射工厂中读webconfig配置,这样就能利用发射加载该程序集了,然后在BLL层中传对应的类名,让工厂来生产出该类的对象。这样就实现了只要在webconfig中配置好要使用的数据访问层的程序集名称,就能实现使用那个数据访问层来访问数据库了。这里要注意的是,DB2DAL与OracleDAL两类库中的类名必须都一样,这样BLL写好的类名才能在两项目中都能找到。我说的可能不好明白,代码上传,自己一看就OK了,这里我再提提这项目中各项目的引用(截图吧):

    这个一看估计也懂,我只是提醒这一定要注意了,少引用了报错,多引用了,也没这个必要,也使项目变得混乱。

    这里要注意了: 你的网站项目里一定要引用你数据访问接口的实现项目,如:DemoOracleDAL.dll和DemoSqlServerDAL.dll引用,因为反射创建对象是,在web项目的bin目录里查找这个dll的.如果不存在,就会报:“未能加载文件或程序集 ”XXX“ 或它的某一个依赖项。” 切记

    下面是源码:/Files/joey0210/反射实现多数据库切换.rar

  • 相关阅读:
    康复计划
    Leetcode 08.02 迷路的机器人 缓存加回溯
    Leetcode 38 外观数列
    Leetcode 801 使序列递增的最小交换次数
    Leetcode 1143 最长公共子序列
    Leetcode 11 盛水最多的容器 贪心算法
    Leetcode 1186 删除一次得到子数组最大和
    Leetcode 300 最长上升子序列
    Leetcode95 不同的二叉搜索树II 精致的分治
    Leetcode 1367 二叉树中的列表 DFS
  • 原文地址:https://www.cnblogs.com/joey0210/p/2092948.html
Copyright © 2011-2022 走看看