日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C#利用反射實現多數據庫訪問_C#教程

作者:.NET開發菜鳥 ? 更新時間: 2022-05-06 編程語言

在上一篇文章中講解了什么是反射,以及利用反射可以獲取程序集里面的哪些內容。在平時的項目中,可能會遇到項目需要使用多種數據庫,這篇文章中將會講解如何利用反射實現訪問多種數據庫。

項目整體結構如下圖所示:

1、Database.Instance是一個類庫文件,IDBHelper是一個接口,封裝的訪問數據庫數據的CURD方法,OracleDBHelper和SQLServerDBHelper類實現IDBHelper接口,分別用來訪問Oracle數據庫和SQL Server數據庫,接口和類的定義如下:

IDBHelper接口定義

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Database.Instance.Interface
{
    public interface IDBHelper
    {
        /// 
        /// 創建數據
        /// 
        void Create();

        /// 
        /// 更新數據
        /// 
        void Update();

        /// 
        /// 讀取數據
        /// 
        void Retrieve();

        /// 
        /// 刪除數據
        /// 
        void Delete();
    }
}

OracleDBHelper類定義如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Database.Instance.Interface;

namespace Database.Instance.Oracle
{
   public class OracleDBHelper :IDBHelper
    {
        public void Create()
        {
            Console.WriteLine("這是Oracle數據庫執行創建操作");
        }

        public void Update()
        {
            Console.WriteLine("這是Oracle數據庫執行更新操作");
        }

        public void Retrieve()
        {
            Console.WriteLine("這是Oracle數據庫執行讀取操作");
        }

        public void Delete()
        {
            Console.WriteLine("這是Oracle數據庫執行刪除操作");
        }
    }
}

SQLServerDBHelper類定義如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Database.Instance.Interface;

namespace Database.Instance.SQL_Server
{
    public class SQLServerDBHelper:IDBHelper
    {
        public void Create()
        {
            Console.WriteLine("這是SQL Server數據庫執行創建操作");
        }

        public void Update()
        {
            Console.WriteLine("這是SQL Server數據庫執行更新操作");
        }

        public void Retrieve()
        {
            Console.WriteLine("這是SQL Server數據庫執行讀取操作");
        }

        public void Delete()
        {
            Console.WriteLine("這是SQL Server數據庫執行刪除操作");
        }
    }
}

2、MyReflection是一個控制臺程序,用來測試

一、使用原始方法實現

使用原始的方法實現代碼如下:

using Database.Instance.Interface;
using Database.Instance.Oracle;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using System.Configuration;

namespace MyReflection
{
    class Program
    {
        static void Main(string[] args)
        {
            // 實例化(調用Oracle數據庫)
            IDBHelper dbHelper = new OracleDBHelper();
            // 調用方法
            dbHelper.Create();
            dbHelper.Update();
            dbHelper.Retrieve();
            dbHelper.Delete();

            Console.ReadKey();
        }
    }
}

程序運行結果:

存在的問題:如果換一種數據庫,那么就需要修改實例化的代碼,例如更換SQL Server數據庫,那么代碼修改如下:

IDBHelper dbHelper = new SQLServerDBHelper();

這樣很不方便,每次更換數據庫的時候,都需要修改實例化的代碼,有沒有什么方便的方法可以做到不需要修改代碼就可以實現更換數據庫呢?辦法就是使用反射加配置文件實現。

二、使用反射加配置文件實現

配置文件結構如下:



  
    
    
  
    
        
    

Program類定義如下:

using Database.Instance.Interface;
using Database.Instance.Oracle;
using Database.Instance.SQL_Server;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using System.Configuration;

namespace MyReflection
{
    class Program
    {
        static void Main(string[] args)
        {
            // 根據key值讀取對應的value值
            string[] config = ConfigurationManager.AppSettings["Database.Instance.Interface.IDBHelper"].Split(',');
            // 加載程序集 config[0]=Database.Instance
            Assembly assembly = Assembly.Load(config[0]);

            // 根據類的完全限定名找出類型 config[1]= Database.Instance.Oracle.OracleDBHelper
            Type type = assembly.GetType(config[1]);
            // 根據類型創建對象
            object obj = Activator.CreateInstance(type);
            //實例化
            IDBHelper dbHelper = obj as IDBHelper;
            dbHelper.Create();
            dbHelper.Update();
            dbHelper.Retrieve();
            dbHelper.Delete();
            Console.ReadKey();
        }
    }
}

?運行結果如下:

如果更新數據庫,只需要更新配置文件中value的值即可,例如要更換SQL Server數據庫,配置文件修改如下:



  
    
    
  
    
        
    

?Program類不需要修改,運行結果如下:

原文鏈接:https://www.cnblogs.com/dotnet261010/p/8276870.html

欄目分類
最近更新