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
}
}