数据访问层设计(多库操作)(2)

3、自定义配置节处理

using System;
using System.Xml;
using System.Configuration;
using HKH.DataBase.Type;

namespace HKH.DataBase.Config
{
 /// <summary>
 /// 数据库参数配置节处理程序
 /// </summary>
 public class clsDbSettingSectionHandler : IConfigurationSectionHandler
 {
  public clsDbSettingSectionHandler()
  {
  }

  public object Create(object parent, object input, XmlNode node)
  {
   clsDataBaseConfig dbConfig = new clsDataBaseConfig();

   //处理DBSetting节点属性
   foreach ( XmlAttribute xa in node.Attributes )
   {
    switch ( xa.Name )
    {
     case "name":
     {
      dbConfig.ConfigName = xa.Value;
      break;
     }
     case "daoBuilder":
     {
      dbConfig.DAOClass = xa.Value;
      break;
     }
     case "dbAccess":
     {
      dbConfig.DBClass = xa.Value;
      break;
     }
     case "default":
     {
      dbConfig.IsDefault = Convert.ToBoolean( xa.Value );
      break;
     }
     default:
     {
      break;
     }
    }
   }

   //处理connParam节点
   foreach ( XmlNode xn in node.ChildNodes )
   { 
    if ( "#comment" == xn.Name )
     continue;

    string pName = "";
    foreach ( XmlAttribute xa in xn.Attributes )
    {
     switch ( xa.Name )
     {
      case "name":
      {
       pName = xa.Value;
       break;
      }
      case "value":
      {
       if ( "" != xa.Value.Trim() )
        dbConfig.ConnParam.Add(pName,xa.Value);
       break;
      }
      default:
      {
       break;
      }
     }
    }
   }

   clsDBAccessConfig config = clsDBAccessConfig.GetInstance();

   config.AddConfig(dbConfig.ConfigName,dbConfig);
   if (dbConfig.IsDefault)
   {
    config.DefaultDBSetting = dbConfig.ConfigName;
   }

   return null;
  }
 }
}

 

4、数据访问对象工厂

using System;
using System.Xml;
using System.Data;
using System.Configuration;
using System.Reflection;
using HKH.DataBase.Interface;
using HKH.DataBase.Config;
using HKH.DataBase.Type;
using HKH.DataBase.Sql;
using HKH.DataBase.Odbc;
using HKH.DataBase.OleDb;

namespace HKH.DataBase
{
 /// <summary>
 /// DBFactory 的摘要说明。
 /// </summary>
 public sealed class DBFactory
 {
  private DBFactory()
  {
  }

  #region 获取 IDataAccess 的实例

  /// <summary>
  /// 获取默认数据库的访问类实例
  /// </summary>
  /// <returns></returns>
  public static IDBAccess GetDataAccess()
  {
   try
   {
    return GetDataAccess(clsDBAccessConfig.GetInstance().DefaultDBSetting,null,null,null);
   }
   catch ( Exception ex )
   {
    throw ex;
   }
  }

  /// <summary>
  /// 获取默认数据库的访问类实例
  /// </summary>
  /// <param name="myds"></param>
  /// <returns></returns>
  public static IDBAccess GetDataAccess( DataSet myds)
  {
   try
   {
    return GetDataAccess(clsDBAccessConfig.GetInstance().DefaultDBSetting,myds,null,null);
   }
   catch ( Exception ex )
   {
    throw ex;
   }
  }

  /// <summary>
  /// 获取默认数据库的访问类实例
  /// </summary>
  /// <param name="myds"></param>
  /// <param name="Conn"></param>
  /// <param name="Trans"></param>
  /// <returns></returns>
  public static IDBAccess GetDataAccess(DataSet myds,IDbConnection Conn,IDbTransaction Trans)
  {
   try
   {
    return GetDataAccess(clsDBAccessConfig.GetInstance().DefaultDBSetting,myds,Conn,Trans);
   }
   catch ( Exception ex )
   {
    throw ex;
   }
  }

  /// <summary>
  /// 获取默认数据库的访问类实例
  /// </summary>
  /// <param name="Conn"></param>
  /// <param name="Trans"></param>
  /// <returns></returns>
  public static IDBAccess GetDataAccess(IDbConnection Conn,IDbTransaction Trans)
  {
   try
   {
    return GetDataAccess(clsDBAccessConfig.GetInstance().DefaultDBSetting,null,Conn,Trans);
   }
   catch ( Exception ex )
   {
    throw ex;
   }
  }

  /// <summary>
  /// 获取指定数据库的访问类实例
  /// </summary>
  /// <param name="dbConfigName"></param>
  /// <returns></returns>
  public static IDBAccess GetDataAccess(string dbConfigName)
  {
   try
   {
    return GetDataAccess(dbConfigName,null,null,null);
   }
   catch ( Exception ex )
   {
    throw ex;
   }
  }

  /// <summary>
  /// 获取指定数据库的访问类实例
  /// </summary>
  /// <param name="dbConfigName"></param>
  /// <param name="myds"></param>
  /// <returns></returns>
  public static IDBAccess GetDataAccess( string dbConfigName,DataSet myds)
  {
   try
   {
    return GetDataAccess(dbConfigName,myds,null,null);
   }
   catch ( Exception ex )
   {
    throw ex;
   }
  }

  /// <summary>
  /// 获取指定数据库的访问类实例
  /// </summary>
  /// <param name="dbConfigName"></param>
  /// <param name="myds"></param>
  /// <param name="Conn"></param>
  /// <param name="Trans"></param>
  /// <returns></returns>
  public static IDBAccess GetDataAccess(string dbConfigName,DataSet myds,IDbConnection Conn,IDbTransaction Trans)
  {
   try
   {
    clsDataBaseConfig dbConfig= clsDBAccessConfig.GetInstance().GetDBConfig(dbConfigName);
    int index = dbConfig.DBClass.IndexOf(",");
    string cName = dbConfig.DBClass.Substring(0,index);
    string aName = dbConfig.DBClass.Substring(index + 1);
    Assembly assembly = Assembly.Load(aName);
    object[] parms = null;

    if ( null != myds )
    {
     if ( null != Conn )
     {
      parms = new object[]{ myds,Conn,Trans };
     }
     else
     {
      parms = new object[]{ dbConfig.ConnectionString,myds };
     }
    }
    else
    {
     if ( null != Conn )
     {
      parms = new object[]{ Conn,Trans };
     }
     else
     {
      parms = new object[]{ dbConfig.ConnectionString };
     }
    }

    return (IDBAccess)assembly.CreateInstance(cName,false,BindingFlags.CreateInstance,null,parms,null,null);
   }
   catch ( Exception ex )
   {
    throw ex;
   }
  }

  /// <summary>
  /// 获取指定数据库的访问类实例
  /// </summary>
  /// <param name="dbConfigName"></param>
  /// <param name="Conn"></param>
  /// <param name="Trans"></param>
  /// <returns></returns>
  public static IDBAccess GetDataAccess(string dbConfigName,IDbConnection Conn,IDbTransaction Trans)
  {
   try
   {
    return GetDataAccess(dbConfigName,null,Conn,Trans);
   }
   catch ( Exception ex )
   {
    throw ex;
   }
  }

  #endregion

  #region 获取 IDAOBuilder 的实例

  /// <summary>
  /// 获取默认数据库的访问对象实例
  /// </summary>
  /// <returns></returns>
  public static IDAOBuilder GetDAOBuilder()
  {
   try
   {
    return GetDAOBuilder(clsDBAccessConfig.GetInstance().DefaultDBSetting,null,null,null);
   }
   catch ( Exception ex )
   {
    throw ex;
   }
  }

  /// <summary>
  /// 获取默认数据库的访问对象实例
  /// </summary>
  /// <param name="myds"></param>
  /// <returns></returns>
  public static IDAOBuilder GetDAOBuilder(DataSet myds)
  {
   try
   {
    return GetDAOBuilder(clsDBAccessConfig.GetInstance().DefaultDBSetting,myds,null,null);
   }
   catch ( Exception ex )
   {
    throw ex;
   }
  }

  /// <summary>
  /// 获取默认数据库的访问对象实例
  /// </summary>
  /// <param name="myds"></param>
  /// <param name="Conn"></param>
  /// <param name="Trans"></param>
  /// <returns></returns>
  public static IDAOBuilder GetDAOBuilder(DataSet myds ,IDbConnection Conn,IDbTransaction Trans)
  {
   try
   {
    return GetDAOBuilder(clsDBAccessConfig.GetInstance().DefaultDBSetting,myds,Conn,Trans);
   }
   catch ( Exception ex )
   {
    throw ex;
   }
  }

  /// <summary>
  /// 获取默认数据库的访问对象实例
  /// </summary>
  /// <param name="Conn"></param>
  /// <param name="Trans"></param>
  /// <returns></returns>
  public static IDAOBuilder GetDAOBuilder(IDbConnection Conn,IDbTransaction Trans)
  {
   try
   {
    return GetDAOBuilder(clsDBAccessConfig.GetInstance().DefaultDBSetting,null,Conn,Trans);
   }
   catch ( Exception ex )
   {
    throw ex;
   }
  }

  /// <summary>
  /// 获取指定数据库的访问对象实例
  /// </summary>
  /// <param name="dbConfigName"></param>
  /// <returns></returns>
  public static IDAOBuilder GetDAOBuilder(string dbConfigName)
  {
   try
   {
    return GetDAOBuilder(dbConfigName,null,null,null);
   }
   catch ( Exception ex )
   {
    throw ex;
   }
  }

  /// <summary>
  /// 获取指定数据库的访问对象实例
  /// </summary>
  /// <param name="dbConfigName"></param>
  /// <param name="myds"></param>
  /// <returns></returns>
  public static IDAOBuilder GetDAOBuilder(string dbConfigName,DataSet myds)
  {
   try
   {
    return GetDAOBuilder(dbConfigName,myds,null,null);
   }
   catch ( Exception ex )
   {
    throw ex;
   }
  }

  /// <summary>
  /// 获取指定数据库的访问对象实例
  /// </summary>
  /// <param name="dbConfigName"></param>
  /// <param name="myds"></param>
  /// <param name="Conn"></param>
  /// <param name="Trans"></param>
  /// <returns></returns>
  public static IDAOBuilder GetDAOBuilder(string dbConfigName,DataSet myds ,IDbConnection Conn,IDbTransaction Trans)
  {
   try
   {
    clsDataBaseConfig dbConfig= clsDBAccessConfig.GetInstance().GetDBConfig(dbConfigName);
    int index = dbConfig.DAOClass.IndexOf(",");
    string cName = dbConfig.DAOClass.Substring(0,index);
    string aName = dbConfig.DAOClass.Substring(index + 1);
    Assembly assembly = Assembly.Load(aName);
    object[] parms = null;

    if ( null != myds )
    {
     if ( null != Conn )
     {
      parms = new object[]{ myds,Conn,Trans };
     }
     else
     {
      parms = new object[]{ dbConfig.ConnectionString,myds };
     }
    }
    else
    {
     if ( null != Conn )
     {
      parms = new object[]{ Conn,Trans };
     }
     else
     {
      parms = new object[]{ dbConfig.ConnectionString };
     }
    }

    return (IDAOBuilder)assembly.CreateInstance(cName,false,BindingFlags.CreateInstance,null,parms,null,null);
   }
   catch ( Exception ex )
   {
    throw ex;
   }
  }

  /// <summary>
  /// 获取指定数据库的访问对象实例
  /// </summary>
  /// <param name="dbConfigName"></param>
  /// <param name="Conn"></param>
  /// <param name="Trans"></param>
  /// <returns></returns>
  public static IDAOBuilder GetDAOBuilder(string dbConfigName,IDbConnection Conn,IDbTransaction Trans)
  {
   try
   {
    return GetDAOBuilder(dbConfigName,null,Conn,Trans);
   }
   catch ( Exception ex )
   {
    throw ex;
   }
  }
  #endregion

  #region 私有方法

  #endregion

 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

honkerhero

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值