应用反射原理实现跨数据库操作(通过反射去获取程序集中的成员信息)

1、反射的概念在上节博客中已经解释过了,下面我们开始分析业务需求逻辑,再利用反射原理去将其实现;
2、说明:
      通常一个项目中只允许去连接一个数据库去操作数据,但是有些过于繁杂的业务就会用到多个数据库之间的交互操作了。
3、看一下项目结构:
在这里插入图片描述
4、首先咱们不用反射技术去实现,看一下代码:
      咱们在一下示例中以oracle和sqlserver两个数据库为例:

//数据库访问接口类
    public interface IDBHelper
    {
        /// <summary>
        /// 新增
        /// </summary>
        void Create();
        /// <summary>
        /// 修改
        /// </summary>
        void Update();
        /// <summary>
        /// 删除
        /// </summary>
        void Delete();
        /// <summary>
        /// 查询
        /// </summary>
        void Select();
    }
//oracle类
public class Oracle:IDBHelper
    {
        public void Create()
        {
            Console.WriteLine("Oracle ,新增数据操作!");
        }
        public void Update()
        {
            Console.WriteLine("Oracle ,修改数据操作!");
        }
        public void Delete()
        {
            Console.WriteLine("Oracle ,删除数据操作!");
        }
        public void Select()
        {
            Console.WriteLine("Oracle ,查询数据操作!");
        }
    }
//sqlserver类
        public void Create() {
            Console.WriteLine("Sql Server ,新增数据操作!");
        }
        public void Update()
        {
            Console.WriteLine("Sql Server ,修改数据操作!");
        }
        public void Delete()
        {
            Console.WriteLine("Sql Server ,删除数据操作!");
        }
        public void Select()
        {
            Console.WriteLine("Sql Server ,查询数据操作!");
        }

      控制台代码:

class Program
    {
        static void Main(string[] args)
        {
            IDBHelper db = new Sql_Server();//或者IDBHelper db = new Oracle();
            db.Create();//新增
            db.Update();//修改
            db.Delete();//删除
            db.Select();//查询
            Console.ReadKey();
        }
    }

运行结果,如图:
在这里插入图片描述
在这里插入图片描述
这样做的话是实现了业务需求,但是如果要是换库的话就比较麻烦了,就得重新修改写好的代码了,下面我们利用反射的方式去解决这个小bug:
先在app.config里面新添加配置信息:

  <appSettings>
   <!-- <add key="DataBase.Operation" value="DataBase.Operation,DataBase.Operation.DataBase_Oracle.Oracle"/>-->//此处的信息可以任意修改,不用程序去编译
    <add key="DataBase.Operation" value="DataBase.Operation,DataBase.Operation.DataBase_SqlServer.Sql_Server"/>
  </appSettings>

我这里就直接上控制台的程序了:

    class Program
    {
        static void Main(string[] args)
        {
            //获取配置文件中的程序集信息名称
            string[] configs = ConfigurationManager.AppSettings["DataBase.Operation"].ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
            Assembly assembly = Assembly.Load(configs[0]);//加载程序集
            Type t = assembly.GetType(configs[1]);//获取程序集中指定的某一模块的程序信息
            object obj_Dbhelper = Activator.CreateInstance(t);//创建实例
            IDBHelper db = obj_Dbhelper as IDBHelper;//转换为实例信息
            db.Create();//新增
            db.Update();//修改
            db.Delete();//删除
            db.Select();//查询
            Console.ReadKey();
        }
    }

运行效果:
在这里插入图片描述
在这里插入图片描述

今天关于反射技术的扩展和应用就先做笔记,做到这里了。see you later ~

纯洁的思想,可使最微小的行动高贵起来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值