ado.net统一事务,及连接池管理(五)

来源:互联网 发布:腐植酸淘宝多少钱一吨 编辑:程序博客网 时间:2024/06/06 14:18

数据库参数配置类,代码如下:

===================================
namespace b2c.DB
{
 using System;
 using System.Collections;
 using System.Diagnostics;
 using System.Configuration;
 using System.Xml;
 using System.Collections.Specialized;

 /// <summary>
 /// 此类是数据库配置类,包含数据库连接串有关的配置信息。
    ///
    ///<newpara></newpara>
 /// 这些配置信息必须放在Web.config(B/S架构)或是App.config(C/S架构)中,
 /// 并且必须放在放在一个名为‘DatabaseConfig’的配置节中。
 ///
 /// <newpara></newpara>
 /// 在配置文件的configSections节点中增加如下配置节:
 /// <!-- 数据库配置节 -->
 /// <section name="DatabaseConfig" type="b2c.DB.DatabaseConfig, b2c"/>
 ///
 /// <newpara></newpara>
 /// 调用方法:
 /// 1、调用本类的静态方法LoadConfig(只需调用一次)。
 /// 2、读取本类的公开的属性。
 /// 
 /// <newpara></newpara>
 /// 此配置节应包括如下信息:
 /// 数据库服务器、数据库名称、数据库用户名、登录密码、最大数据库连接数、最小数据库连接数。
 /// <DatabaseConfig>
 ///  <!--- 数据库SID -->
 ///  <add key="DataSource" value="hnpgc" />
 ///  <!--- 数据库用户名 -->
 ///  <add key="UserID" value="base" />
 ///  <!--- 登录密码 -->
 ///  <add key="Password" value="base" />
 /// </DatabaseConfig>
    /// </summary>
    public class DatabaseConfig : IConfigurationSectionHandler
    {
  /// <summary>
  /// 如果应用此配置,则需要在配置文件中,以此作为配置节名称。
  /// </summary>
  public const string CONFIG_SECTION_NAME = "DatabaseConfig";

        private static bool isConfigLoad = false;   //标志配置是否加载


  #region 数据库配置项关键字

  //数据库连接串配置项关键字
  private const string DATA_SOURCE = "DataSource";
  private const string USER_ID = "UserID";
  private const string USER_PASSWORD = "Password";
  private const string MAX_POOL_SIZE = "MaxPoolSize";
  private const string MIN_POOL_SIZE = "MinPoolSize";
  private const string CONNECT_TIME_OUT = "ConnectTimeOut";

  #endregion

  #region 配置项默认值

  //数据库配置默认值
  private const string DATA_SOURCE_DEFAULT = "hnpgc";
  private const string USER_ID_DEFAULT = "base";
  private const string USER_PASSWORD_DEFAULT = "base";
  private const string MAX_POOL_SIZE_DEFAULT = "50";
  private const string MIN_POOL_SIZE_DEFAULT = "5";
  private const string CONNECT_TIME_OUT_DEFAULT = "15";

  #endregion

  #region 数据库配置项值

  //数据库连接串
  private static string dataSource;
  private static string userID;
  private static string password;
  private static string maxPoolSize;
  private static string minPoolSize;
  private static string connectTimeOut;

  #endregion


  /// <summary>
  /// 加载与该配置节有关的配置信息。
  /// </summary>
  public static void LoadConfig()
  {
            //如果配置未加载则去加载,并设置标志。
            if (!isConfigLoad)
            {
                System.Configuration.ConfigurationSettings.GetConfig(CONFIG_SECTION_NAME);
                isConfigLoad = true;
            }
  }

  /// <summary>
  /// 在web.config或app.config中设置该类及程序集的信息后,
  /// 该方法不必手工调用,在应用启动后被自动调用。
  /// </summary>
  /// <param name="parent"></param>
  /// <param name="configContext"></param>
  /// <param name="section"></param>
  /// <returns></returns>
  public Object Create(Object parent, object configContext, XmlNode section)
  {
                   
   NameValueCollection settings;
                   
   try
   {
    NameValueSectionHandler baseHandler = new NameValueSectionHandler();
    settings = (NameValueCollection)baseHandler.Create(parent, configContext, section);
   }
   catch
   {
    settings = null;
   }
       

   if (settings == null)
   {
    dataSource = DATA_SOURCE_DEFAULT;
    userID = USER_ID_DEFAULT;
    password = USER_PASSWORD_DEFAULT;
    connectTimeOut = CONNECT_TIME_OUT_DEFAULT;
    minPoolSize = MIN_POOL_SIZE_DEFAULT;
    maxPoolSize = MAX_POOL_SIZE_DEFAULT;
   }
   else
   {
    dataSource = ReadSetting(settings, DATA_SOURCE, DATA_SOURCE_DEFAULT);
    userID = ReadSetting(settings, USER_ID, USER_ID_DEFAULT);
    password = ReadSetting(settings, USER_PASSWORD, USER_PASSWORD_DEFAULT);
    connectTimeOut = ReadSetting(settings, CONNECT_TIME_OUT, CONNECT_TIME_OUT_DEFAULT);
    minPoolSize = ReadSetting(settings, MIN_POOL_SIZE, MIN_POOL_SIZE_DEFAULT);
    maxPoolSize = ReadSetting(settings, MAX_POOL_SIZE, MAX_POOL_SIZE_DEFAULT);
   }

   return null;
  }
       
  /// <summary>
  /// 从配置集合中返回匹配配置项的值
  /// </summary>
  /// <param name="settings">配置集合</param>
  /// <param name="key">配置项</param>
  /// <param name="defaultValue">默认值</param>
  /// <returns></returns>
  public static string ReadSetting(NameValueCollection settings, string key, string defaultValue)
  {
   try
   {
    Object setting = settings[key];
               
    return (setting == null) ? defaultValue : (string)setting;
   }
   catch
   {
    return defaultValue;
   }
  }
               
  /// <summary>
  /// 数据源,一般指数据库SID。
  /// </summary>
  public static string DataSource
  {
   get
   {
    return dataSource;
   }
  }   
  
  /// <summary>
  /// 数据库用户名。
  /// </summary>
  public static string UserID
  {
   get
   {
    return userID;
   }
  }  
  
  /// <summary>
  /// 数据库密码。
  /// </summary>
  public static string Password
  {
   get
   {
    return password;
   }
  }

  /// <summary>
  /// 连接池中最大的连接数,默认值为 100个。
  /// </summary>
  public static int MaxPoolSize
  {
   get
   {
    if (maxPoolSize.Equals(string.Empty))
    {
     maxPoolSize = MAX_POOL_SIZE_DEFAULT;
    }

    return int.Parse(maxPoolSize);
   }
  }
  
  /// <summary>
  /// 连接池中最小的连接数,默认值为 1个。
  /// </summary>
  public static int MinPoolSize
  {
   get
   {
    if (minPoolSize.Equals(string.Empty))
    {
     minPoolSize = MIN_POOL_SIZE_DEFAULT;
    }

    return int.Parse(minPoolSize);
   }
  }
  
  /// <summary>
  /// 等待连接打开的时间(以秒为单位),默认值为 15 秒。
  /// </summary>
  public static int ConnectTimeOut
  {
   get
   {
    if (connectTimeOut.Equals(string.Empty))
    {
     connectTimeOut = CONNECT_TIME_OUT_DEFAULT;
    }
    return int.Parse(connectTimeOut);
   }
  }
    }
}