網站首頁 編程語言 正文
在上一篇文章中講解了什么是反射,以及利用反射可以獲取程序集里面的哪些內容。在平時的項目中,可能會遇到項目需要使用多種數據庫,這篇文章中將會講解如何利用反射實現訪問多種數據庫。
項目整體結構如下圖所示:
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
相關推薦
- 2022-05-02 Shell命令中的特殊替換、模式匹配替換、字符串提取和替換的實現_linux shell
- 2022-07-13 VMware Workstation Pro界面設置為中文界面
- 2023-05-15 golang中的時間格式化_Golang
- 2022-11-08 PostgreSQL長事務與失效的索引查詢淺析介紹_PostgreSQL
- 2022-10-21 C++?smart?pointer全面深入講解_C 語言
- 2022-11-26 Python反向傳播實現線性回歸步驟詳細講解_python
- 2022-08-06 為Visual?Studio手工安裝微軟ReportViewer控件_自學過程
- 2022-12-10 Qt顯示QImage圖像在label上,并保持自適應大小問題_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支