广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#利用反射实现多数据库访问
  • 950
分享到

C#利用反射实现多数据库访问

2024-04-02 19:04:59 950人浏览 泡泡鱼
摘要

在上一篇文章中讲解了什么是反射,以及利用反射可以获取程序集里面的哪些内容。在平时的项目中,可能会遇到项目需要使用多种数据库,这篇文章中将会讲解如何利用反射实现访问多种数据库。 项目整

在上一篇文章中讲解了什么是反射,以及利用反射可以获取程序集里面的哪些内容。在平时的项目中,可能会遇到项目需要使用多种数据库,这篇文章中将会讲解如何利用反射实现访问多种数据库

项目整体结构如下图所示:

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
    {
        /// <summary>
        /// 创建数据
        /// </summary>
        void Create();

        /// <summary>
        /// 更新数据
        /// </summary>
        void Update();

        /// <summary>
        /// 读取数据
        /// </summary>
        void Retrieve();

        /// <summary>
        /// 删除数据
        /// </summary>
        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();

这样很不方便,每次更换数据库的时候,都需要修改实例化的代码,有没有什么方便的方法可以做到不需要修改代码就可以实现更换数据库呢?办法就是使用反射加配置文件实现。

二、使用反射加配置文件实现

配置文件结构如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <!--key表示定义的接口 value格式 要加载的程序集名称,要实例化的类 value值中间以','分割-->
    <add key="Database.Instance.Interface.IDBHelper" value="Database.Instance,Database.Instance.Oracle.OracleDBHelper"/>
  </appSettings>
    <startup>
        <supportedRuntime version="v4.0" sku=".netFramework,Version=v4.5.1" />
    </startup>
</configuration>

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数据库,配置文件修改如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <!--key表示定义的接口 value格式 要加载的程序集名称,要实例化的类 value值中间以','分割-->
    <add key="Database.Instance.Interface.IDBHelper" value="Database.Instance,Database.Instance.SQL_Server.SQLServerDBHelper"/>
  </appSettings>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
    </startup>
</configuration>

 Program类不需要修改,运行结果如下:

到此这篇关于C#利用反射实现多数据库访问的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C#利用反射实现多数据库访问

本文链接: https://www.lsjlt.com/news/141541.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#利用反射实现多数据库访问
    在上一篇文章中讲解了什么是反射,以及利用反射可以获取程序集里面的哪些内容。在平时的项目中,可能会遇到项目需要使用多种数据库,这篇文章中将会讲解如何利用反射实现访问多种数据库。 项目整...
    99+
    2022-11-13
  • C#使用ADO.Net连接数据库与DbProviderFactory实现多数据库访问
    一、ADO.Net数据库连接字符串 1、OdbcConnection(System.Data.Odbc) (1)SQL Sever 标准安全:" Driver={SQL S...
    99+
    2022-11-13
  • C#怎么使用ADO.Net连接数据库与实现多数据库访问
    本文小编为大家详细介绍“C#怎么使用ADO.Net连接数据库与实现多数据库访问”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#怎么使用ADO.Net连接数据库与实现多数据库访问”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来...
    99+
    2023-06-30
  • C# 中怎么利用ODBC访问MySQL数据库
    C# 中怎么利用ODBC访问MySQL数据库,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。安装Microsoft ODBC.net:我安装的是mysql-con...
    99+
    2023-06-17
  • 怎么利用C++实现一个反射类
    这篇文章主要讲解了“怎么利用C++实现一个反射类”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么利用C++实现一个反射类”吧!代码环境为VScode + CMake + GCC 8.1.0...
    99+
    2023-07-05
  • 详解如何利用C++实现一个反射类
    目录正题开始Singleton.h反射类Reflex.h代码环境为VScode + CMake + GCC 8.1.0 首先,如何才能做到给我一个名字我就能拿到这个对象的这个值,也是...
    99+
    2023-03-09
    C++实现反射类 C++反射类
  • C++使用MySQL Connector/C++访问mysql数据库
    去官网下载,分为release模式和debug模式两种,分别对应VS中的release和debug。如下图所示: 注意: 如果使用debug模式,下载的上面的release模式库文件,那么编译就会出...
    99+
    2023-09-05
    数据库 mysql c++
  • C#如何实现数据访问XML
    这篇文章给大家分享的是有关C#如何实现数据访问XML的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在举C#数据访问XML的例子之前,首先介绍一些知识和定义。XML DOM的类所在的命名空间为System.Xml中...
    99+
    2023-06-17
  • Asp.netcore利用dynamic简化数据库访问
    今天写了一个数据库的帮助类,代码如下。  public static class DbEx { public static dynamic ReadToObject...
    99+
    2022-11-13
  • JavaScript中怎么利用DOM实现数据访问
    本篇文章给大家分享的是有关JavaScript中怎么利用DOM实现数据访问,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。通过JavaScrip...
    99+
    2022-10-19
  • 如何利用VB.NET数据库访问方法封装到类实现
    这期内容当中小编将会给大家带来有关如何利用VB.NET数据库访问方法封装到类实现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。我们都知道,线程要执行的方法不能接受任何参数,如果要传入方法特定条件,可以将方...
    99+
    2023-06-17
  • Java利用套接字实现应用程序对数据库的访问
    目录前言Client.javaServer.javaServerThread.javaSearchInfo.javaGUI.java前言 最近在完成软件体系结构上机实验时,遇到一个有...
    99+
    2022-11-13
  • C#开发中如何使用多线程并发访问数据库
    C#开发中如何使用多线程并发访问数据库在C#开发中,多线程并发访问数据库是一个常见的需求。使用多线程可以提高数据库操作的效率,但同时也需要注意线程安全和数据库连接管理等问题。本文将介绍如何使用多线程在C#中并发访问数据库,并提供具体的代码示...
    99+
    2023-10-22
    多线程 C# 数据库访问
  • Holer实现外网访问PostgreSQL数据库
    外网访问内网PostgreSQL数据库 内网主机上安装了PostgreSQL数据库,只能在局域网内访问,怎样从公网也能访问本地PostgreSQL数据库? 本文将介绍使用holer实现的具体步骤。...
    99+
    2022-10-18
  • Holer实现MongoDB数据库外网访问
    外网访问内网MongoDB数据库 内网主机上安装了MongoDB数据库,只能在局域网内访问,怎样从公网也能访问本地MongoDB数据库? 本文将介绍使用holer实现的具体步骤。 1. 准备工...
    99+
    2022-10-18
  • Java中怎么利用JDBC和DBCP访问数据库
    本篇文章为大家展示了Java中怎么利用JDBC和DBCP访问数据库,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。JDBC:Connection conn&...
    99+
    2022-10-18
  • Asp.net core怎么利用dynamic简化数据库访问
    这篇文章主要介绍“Asp.net core怎么利用dynamic简化数据库访问”,在日常操作中,相信很多人在Asp.net core怎么利用dynamic简化数据库访问问题上存在疑惑,小编查阅了各式资料,整理出简单好用的...
    99+
    2023-07-02
  • Holer实现外网访问内网数据库
    外网访问内网数据库 本地安装了数据库,只能在局域网内访问,怎样从外网也能访问本地数据库? 本文将介绍使用holer实现的具体步骤。 1. 准备工作 1.1 安装并启动数据库 默认安装的数据库端口是3306。...
    99+
    2022-10-18
  • Spring Boot使用MyBatis如何实现访问数据库
    今天就跟大家聊聊有关Spring Boot使用MyBatis如何实现访问数据库,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。基于spring boot开发的微服务应用,与MyBati...
    99+
    2023-05-31
    springboot 数据库 mybatis
  • springboot使用AOP+反射实现Excel数据的读取
    如果我们遇到把excel表格中的数据导入到数据库,首先我们要做的是:将excel中的数据先读取出来。因此,今天就给大家分享一个读取Excel表格数据的代码示例: 为了演示方便,首先我...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作