在web.config的<appSettings>配置节中定义名webDAL键,它的值为所需访问的数据库对应的程序集名称,如你访问数据库为mssql,对应的项目文件为prjName.SqlServerDAL.dll(命名空间为prjName.SqlServerDAL)则webDAL的值为prjName.SqlServerDAL

1   <appSettings>
2       <!--设置数据访问层程序集,sql为prjName.SQLServerDAL,oracle为prjName.OracleDAL -->
3       <add key="WebDAL" value="prjName.SQLServerDAL"/>
4    </appSettings>

当程序运行时由工厂类DalFactory调用ConfingurationManager类的AppSettings方法获取web.config中的键值,采用反射技术动态加载指定类型

 1 using System.Reflection;
 2 using System.Configuration;
 3 
 4 namespace prjName.DALFactory {
 5     /// <summary>
 6     /// 工厂类,用于创建产品类实例
 7     /// </summary>
 8     public sealed class DataAccess {
 9 
10         // 获取使用的程序集的名称
11         private static readonly string path = ConfigurationManager.AppSettings["WebDAL"];     
12         private DataAccess() { }
13 
14         public static prjName.IDAL.IDal CreateDal() {
15             string className = path + ".userDal";
16             return (prjName.IDAL.IDal)Assembly.Load(path).CreateInstance(className);
17         }
18 
19     }
20 }

数据访问层接口类

 1 namespace prjName.IDAL {
 2 
 3     /// <summary>
 4     /// 产品抽象类
 5     /// </summary>
 6     public interface IDal{
 7         
 8         /// <summary>
 9         /// 从数据库中查询用户信息
10         /// </summary>
11         userInfo getUserInfo(string userId,string pwd);
12     }
13 }

访问SqlServer数据库的具体数据访问类

 1 namespace prjName.SQLServerDAL {
 2 
 3     public class userDal : IDal {
 4         /// <summary>
 5         /// 从数据库中获取用户信息
 6         /// </summary>
 7 
 8         public userInfo GetUserInfo(string userId) {
 9 
10             //省略数据库访问代码
11             //   :
12             //   :
13 
14         }
15     }
16 }

访问oracle数据库访问类

 1  namespace prjName.oracleDAL {
 2  
 3      public class userDal : IDal {
 4          /// <summary>
 5          /// 从数据库中获取用户信息
 6          /// </summary>
 7  
 8          public userInfo GetUserInfo(string userId) {
 9  
10              //省略数据库访问代           
11              //   :
12              //   :
13  
14          }
15      }
16  }

转载于:https://www.cnblogs.com/lin614/archive/2008/04/24/1169047.html

反射工厂在数据访问层的应用相关推荐

  1. 谈一谈:抽象工厂+反射+配置文件 实现数据访问程序

    <大话设计模式>中第15章中<就不能不换DB吗?>引出了我今天要谈论的主题:抽象工厂+反射+配置文件 实现数据访问程序.当时也不甚理解啊!到了机房收费的亲身实践中,终于体会到了 ...

  2. 数据访问层之数据库访问设计(转)

    在PetShop中,系统需要处理的数据库对象分为两类:一是数据实体,对应数据库中相应的数据表.它们没有行为,仅用于表现对象的数据.这些实体类都被放到Model程序集中,例如数据表Order对应的实体类 ...

  3. 企业级应用架构(三)三层架构之数据访问层的改进以及测试DOM的发布

    在上一篇我们在宏观概要上对DAL层进行了封装与抽象.我们的目的主要有两个:第一,解除BLL层对DAL层的依赖,这一点我们通过定义接口做到了:第二,使我们的DAL层能够支持一切数据访问技术,如Ado.n ...

  4. 打造自己的数据访问层(三)

    上一篇打造自己的数据访问层(二)中,我们已具体实现了数据访问层对应的功能,该进行收尾工作了,先来看段代码,试试上一篇实现的功能: View Code string sqlText = "SE ...

  5. petshop4.0 详解之二(数据访问层之数据库访问设计)

    在系列一中,我从整体上分析了PetShop的架构设计,并提及了分层的概念.从本部分开始,我将依次对各层进行代码级的分析,以求获得更加细致而深入的理解.在PetShop 4.0中,由于引入了ASP.Ne ...

  6. petshop4.0 详解之三(PetShop数据访问层之消息处理) [转]

    三.PetShop数据访问层之消息处理 在进行系统设计时,除了对安全.事务等问题给与足够的重视外,性能也是一个不可避免的问题所在,尤其是一个B/S结构的软件系统,必须充分地考虑访问量.数据流量.服务器 ...

  7. [wayfarer]PetShop数据访问层之消息处理

    原文地址: http://www.cnblogs.com/wayfarer/archive/2006/09/06/496207.html <解剖PetShop>系列之三 三.PetShop ...

  8. [wayfarer]PetShop数据访问层之数据库访问设计

    原文地址: http://www.cnblogs.com/wayfarer/archive/2006/04/21/381315.html <解剖PetShop>系列之二 二.PetShop ...

  9. 数据访问层DAL的再次重构_3(转载)

    原文链接 接着数据访问层DAL的再次重构_2_模块的自定义设置节我们继续实现,到这里,开始后台编码,经历了建立数据库.建表.存储过程.web.config的自定义配置节点后,我们来实现数据访问层的编码 ...

最新文章

  1. 无人机、IoT 设备都有漏洞?专访以色列老牌安全企业Check Point | 拟合
  2. 短序列组装Sequence Assembly(转载)
  3. 三大技术突破,网易云信实现在线音乐教育极速上线
  4. 【Java操作】IDEA 导入Springboot 项目:
  5. Redis架构及分片管理
  6. php stomp rabbitmq,docker环境下的RabbitMQ部署,Spring AMQP使用
  7. SpringMVC框架使用注解执行定时任务
  8. 地址解析协议ARP:ARP欺骗
  9. 74LV165与74HC595 使用
  10. 【J2ME笔记】关于J2ME Image图片指定颜色透明化
  11. [论文阅读] (19)英文论文Evaluation(实验数据集、指标和环境)如何描述及精句摘抄——以系统AI安全顶会为例
  12. 网络管理(课程总结3)Week12 澳大利亚维多利亚大学VIT1104 Computer Networks
  13. Android动态ip请求,连接从Android设备的locahost使用动态IP地址(不断变化的)
  14. 用php搭建微信公众号,用PHP搭建一个自己的微信公众号
  15. 软工专硕考研_你可能需要了解--2018年北京大学软微软件工程专硕考研 经验分享...
  16. Scroller类的源码分析以及使用
  17. SQL 排序时对Null值的处理
  18. 使用Synopsys VCS使用constraint遇到的一个奇怪问题
  19. 未来音乐战场:从「听音乐」到「用音乐」
  20. 【APICloud系列|29】dialogBox模块(对话框)的实现

热门文章

  1. python对数据进行统计分析_python获取ELK数据进行统计分析
  2. Android 8.0 linux内核,在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序---Android8.0版本实现-对照老罗版本...
  3. 小程序跳转样式布局错乱_小程序页面布局样式元素总结
  4. html版本操作手册,全新HTML5用户手册(版本2017)–互联网股票买卖操作.PDF
  5. 网络启动安装linux客户机nfs设置,NFS服务端和客户端安装配置
  6. python和.net的区别_c#教程之.net和C#的区别
  7. mysql检索整数_MyBatis从MySql DB中检索整数为Enum
  8. 单片机和微型计算机硬件组成的异同,嵌入式和单片机的区别是什么?两者有什么联系...
  9. mysql ceil,MySQL常用函数介绍
  10. 新疆大学c语言期末考试题库,2016年新疆师范大学教育科学学院C语言程序设计考研复试题库...