博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用反射+抽象工厂的数据访问(3)
阅读量:6339 次
发布时间:2019-06-22

本文共 1731 字,大约阅读时间需要 5 分钟。


   
最后实现的代码如下:

 

所有数据库的基类(DbProviderFactory.cs

using System;

using System.Data;

using System.Data.Common;

using System.Reflection;

 

namespace SplendidCRM

{

       
public class DbProviderFactory

       
{

              
protected string
      
m_sConnectionString ;

              
protected Assembly
    
m_asmSqlClient
      
;

              
protected System.Type m_typSqlConnection
  
;

              
protected System.Type m_typSqlCommand
     
;

              
protected System.Type m_typSqlDataAdapter ;

              
protected System.Type m_typSqlParameter
   
;

              
protected System.Type m_typSqlBuilder
     
;

       
/// <summary>

       
/// 
 
DbProviderFactory
构造函数,用一系列参数指定实际使用的是什么数据库

       
/// </summary>

              
public DbProviderFactory(string sConnectionString, string sAssemblyName, string sConnectionName, string sCommandName, string sDataAdapterName, string sParameterName, string sBuilderName)

              
{

                     
m_sConnectionString = sConnectionString;

                     
// 
使用反射

                     
m_asmSqlClient
      
= Assembly.LoadWithPartialName(sAssemblyName);

                     
if ( m_asmSqlClient == null )
 
throw(new Exception("
无法载入
 " + sAssemblyName));  

                     
m_typSqlConnection
      
= m_asmSqlClient.GetType(sConnectionName );

                     
m_typSqlCommand
       
= m_asmSqlClient.GetType(sCommandName);

              
       
m_typSqlDataAdapter
    
= m_asmSqlClient.GetType(sDataAdapterName);

                     
m_typSqlParameter
              
= m_asmSqlClient.GetType(sParameterName);

              
}

       
/// <summary>

       
/// 
 
连接对象,此时无论是什么数据库连接,都是
IDbConnection
的子类,所以返回的类型为
IDbConnection

       
/// </summary>

              
public IDbConnection CreateConnection()

              
{

                     
Type[] types = new Type[1];

                     
types[0] = Type.GetType("System.String");

                     
ConstructorInfo info = m_typSqlConnection.GetConstructor(types);

                     
object[] parameters = new object[1];

                     
parameters[0] = m_sConnectionString;

                     
IDbConnection con = info.Invoke(parameters) as IDbConnection;

                     
if ( con == null )

                            
throw(new Exception(" 
无法创建连接
Connection"));

                     
return con;

              }

   本文转自My_King1 51CTO博客,原文链接:http://blog.51cto.com/apprentice/1360590,如需转载请自行联系原作者

你可能感兴趣的文章
Spring中 @Autowired标签与 @Resource标签 的区别
查看>>
人工智能凭什么毁灭人类
查看>>
今天的学习
查看>>
面试必问之JVM原理
查看>>
mysql主主同步+Keepalived
查看>>
研究音频编解码要看什么书
查看>>
tomcat远程调试配置
查看>>
QuartZ Cron表达式
查看>>
性能测试工具VTune的功能和用法介绍
查看>>
音频视频组件Audio DJ Studio for .NET更新至v10.0.0.0丨附下载
查看>>
RMAN Complete Recovery
查看>>
[ CodeForces 1064 B ] Equations of Mathematical Magic
查看>>
NYOJ-15:括号匹配(二)
查看>>
首次记录在案的
查看>>
成长路上如何快速升级?你需要强大的自我驱动力
查看>>
C#进阶系列——WebApi 跨域问题解决方案:CORS
查看>>
你真的会玩SQL吗?让人晕头转向的三值逻辑
查看>>
Unity 脚本的未来发展
查看>>
hdu 2055 An easy problem (java)
查看>>
JQuery:JQuery捕获HTML
查看>>