通过反射实现多数据访问

Posted 男孩IT小菜鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过反射实现多数据访问相关的知识,希望对你有一定的参考价值。

每种数据库都有自己的链接组件。比如:System.Data.SqlClient,System.Data.OracleClient,Oracle.DataAccess.Client,mysql.Data,IBM.Data.DB2,Sybase.Data.AseClient,iAnywhere.Data.AsaClient,Npgsql等等!

反射:

通过【Type类】可以访问任意数据类型信息,常使用Type类的静态方法GetType(),如Type t =Type.GetType("MySql.Data");这就拿到了组件(提前得先引用)的元数据。

(1)通过【Assembly类】加载程序集,例如:Assembly  m_asmSqlClient = Assembly.LoadWithPartialName(“Oracle.DataAccess”);//LoadWithPartialName()使用部分名称从应用程序目录或从全局程序集缓存加载程序集。

(2)Type m_typSqlConnection = m_asmSqlClient.GetType("Oracle.DataAccess.Client.OracleConnection" ) //GetType()可以得到加载进来的程序集中的类

(3)ConstructorInfo info = m_typSqlConnection.GetConstructor(types); //GetConstructor(Type types )//根据参数类型得到实例,比如:Type[] types = new Type[1]; types[0] = Type.GetType("System.String"); 表示参数是字符串

(4)IDbConnection con = info.Invoke(parameters) as IDbConnection; //Invoke()初始化传入符合的参数类型,得到需要的类,参数:object[] parameters = new object[1]; parameters[0] = “链接字符串”; 

//【Type类】

1.获取给定类型的Type引用有3种方式:
  a.使用typeof运算符,如Type t = typeof(int);
  b.使用GetType()方法,如int i;Type t = i.GetType();
  c.使用Type类的静态方法GetType(),如Type t =Type.GetType("System.Double");
2.Type的属性:
  Name:数据类型名;
  FullName:数据类型的完全限定名,包括命名空间;
  Namespace:数据类型的命名空间;
  BaseType:直接基本类型;
  UnderlyingSystemType:映射类型;
3.Type的方法:
  GetMethod():返回一个方法的信息;
  GetMethods():返回所有方法的信息。

//【Assembly】

System.Reflection.Assembly类是一个比较常用到的类,在反射中就经常用到。

Assembly是一个包含来程序的名称,版本号,自我描述,文件关联关系和文件位置等信息的一个集合。在.net框架中通过Assembly类来支持,该类位于System.Reflection下,物理位置位于:mscorlib.dll。

在Assembly有很多的方法和属性,里面的加载程序集有3个方法,分别是Load、LoadFrom和LoadFile。

//【ConstructorInfo 】

ConstructorInfo 类可以发现类构造函数的属性 (Attribute) 并提供对构造函数元数据的访问权。说白了通过它可以访问类的属性和方法。

 

以上是关于通过反射实现多数据访问的主要内容,如果未能解决你的问题,请参考以下文章

如何通过只有一个类型而不使用反射来访问一个类型的实现的静态抽象接口成员?

java通过snmp多线程并发访问设备获取数据

面向对象,封装,反射,绑定方法

c#的属性和反射,大约是啥回事

14抽象工厂获取数据访问层的实例,缓存的使用和反射的使用

JAVA——通过自定义注解实现每次程序启动时,自动扫描被注解的方法,获取其路径及访问该路径所需的权限并写入数据库