两种读写配置文件的方案(app.config与web.config通用)

8/3/2015来源:C#应用人气:2197

两种读写配置文件的方案(app.config与web.config通用)

第一种方法:采用MS现有的ConfigurationManager来进行读写

using System.Configuration;namespace Zwj.TEMS.Common{    public abstract class ConfigHelper    {        PRivate ConfigHelper()        { }        /// <summary>        /// 获取配置值        /// </summary>        /// <param name="key"></param>        /// <returns></returns>        public static string GetAppSettingValue(string key)        {            return ConfigurationManager.AppSettings[key];        }        /// <summary>        /// 设置配置值(存在则更新,不存在则新增)        /// </summary>        /// <param name="key"></param>        /// <param name="value"></param>        public static void SetAppSettingValue(string key, string value)        {            var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);            var setting = config.AppSettings.Settings[key];            if (setting==null)            {                config.AppSettings.Settings.Add(key, value);            }            else            {                setting.Value = value;            }            config.Save(ConfigurationSaveMode.Modified);            ConfigurationManager.RefreshSection("appSettings");        }        /// <summary>        /// 删除配置值        /// </summary>        /// <param name="key"></param>        public static void RemoveAppSetting(string key)        {            var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);            config.AppSettings.Settings.Remove(key);            config.Save(ConfigurationSaveMode.Modified);            ConfigurationManager.RefreshSection("appSettings");        }        /// <summary>        /// 获取连接字符串        /// </summary>        /// <param name="name"></param>        /// <returns></returns>        public static string GetConnectionString(string name)        {          return  ConfigurationManager.ConnectionStrings[name].ConnectionString;        }        /// <summary>        /// 设置连接字符串的值(存在则更新,不存在则新增)        /// </summary>        /// <param name="name"></param>        /// <param name="connstr"></param>        /// <param name="provider"></param>        public static void SetConnectionString(string name,string connstr, string provider)        {            var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);            ConnectionStringSettings connStrSettings = config.ConnectionStrings.ConnectionStrings[name];            if (connStrSettings != null)            {                connStrSettings.ConnectionString = connstr;                connStrSettings.ProviderName = provider;            }            else            {                connStrSettings = new ConnectionStringSettings(name, connstr, provider);                config.ConnectionStrings.ConnectionStrings.Add(connStrSettings);            }            config.Save(ConfigurationSaveMode.Modified);            ConfigurationManager.RefreshSection("connectionStrings");        }        /// <summary>        /// 删除连接字符串配置项        /// </summary>        /// <param name="name"></param>        public static void RemoveConnectionString(string name)        {            var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);            config.ConnectionStrings.ConnectionStrings.Remove(name);            config.Save(ConfigurationSaveMode.Modified);            ConfigurationManager.RefreshSection("connectionStrings");        }    }}

 注意:不能直接使用ConfigurationManager.AppSettings及ConfigurationManager.ConnectionStrings进行写操作(即:Add,Remove),因为这两个属性是只读的,本人之前也疑惑,明明能够调用Add,Remove方法,但使用时却报错。

第二种方法:采用原生的xml+XPATH来读写(来源于网络)

//==============================================// FileName: ConfigManager// Description: 静态方法业务类,用于对C#、asp.net中的WinForm & WebForm 项目程序配置文件// app.config和web.config的[appSettings]和[connectionStrings]节点进行新增、修改、删除和读取相关的操作。//==============================================using System;using System.Data;using System.Configuration;using System.Web;using System.Collections.Generic;using System.Text;using System.Xml;public enum ConfigurationFile{    AppConfig = 1,    WebConfig = 2}/// <summary>/// ConfigManager 应用程序配置文件管理器/// </summary>public class ConfigManager{    public ConfigManager()    {        //        // TODO: 在此处添加构造函数逻辑        //    }    /// <summary>    /// 对[appSettings]节点依据Key值读取到Value值,返回字符串    /// </summary>    /// <param name="configurationFile">要操作的配置文件名称,枚举常量</param>    /// <param name="key">要读取的Key值</param>    /// <returns>返回Value值的字符串</returns>    public static string ReadValueByKey(ConfigurationFile configurationFile, string key)    {        string value = string.Empty;        string filename = string.Empty;        if (configurationFile.ToString() == ConfigurationFile.AppConfig.ToString())        {            filename = System.Windows.Forms.application.ExecutablePath + ".config";        }        else        {            filename = System.AppDomain.CurrentDomain.BaseDirectory + "web.config";        }        XmlDocument doc = new XmlDocument();        doc.Load(filename); //加载配置文件         XmlNode node = doc.SelectSingleNode("//appSettings"); //得到[appSettings]节点         ////得到[appSettings]节点中关于Key的子节点        XmlElement element = (XmlElement)node.SelectSingleNode("//add[@key='" + key + "']");        if (element != null)        {            value = element.GetAttribute("value");        }        return value;    }    /// <summary>    /// 对[connectionStrings]节点依据name值读取到connectionString值,返回字符串    /// </summary>    /// <param name="configurationFile">要操作的配置文件名称,枚举常量</param>    /// <param name="name">要读取的name值</param>    /// <returns>返回connectionString值的字符串</returns>    public static string ReadConnectionStringByName(ConfigurationFile configurationFile, string name)    {        string connectionString = string.Empty;        string filename = string.Empty;        if (configurationFile.ToString() == ConfigurationFile.AppConfig.ToString())        {            filename = System.Windows.Forms.Application.ExecutablePath + ".config";        }        else        {            filename = System.AppDomain.CurrentDomain.BaseDirectory + "web.config";        }        XmlDocument doc = new XmlDocument();        doc.Load(filename); //加载配置文件         XmlNode node = doc.SelectSingleNode("//connectionStrings"); //得到[appSettings]节点         ////得到[connectionString]节点中关于name的子节点        XmlElement element = (XmlElement)node.SelectSingleNode("//add[@name='" + name + "']");        if (element != null)        {            connectionString = element.GetAttribute("connectionString");        }        return connectionString;    }    /// <summary>    /// 更新或新增[appSettings]节点的子节点值,存在则更新子节点Value,不存在则新增子节点,返回成功与否布尔值    /// </summary>    /// <param name="configurationFile">要操作的配置文件名称,枚举常量</param>    /// <param name="key">子节点Key值</param>    /// <param name="value">子节点value值</param>    /// <returns>返回成功与否布尔值</returns>    public static bool UpdateOrCreateAppSetting(ConfigurationFile configurationFile, string key, string value)    {        bool isSuccess = false;        string filename = string.Empty;        if (configurationFile.ToString() == ConfigurationFile.AppConfig.ToString())        {            filename = System.Windows.Forms.Application.ExecutablePath + ".config";        }        else        {            filename = System.AppDomain.CurrentDomain.BaseDirectory + "web.config";        }        XmlDocument doc = new XmlDocument();        doc.Load(filename); //加载配置文件         XmlNode node = doc.SelectSingleNode("//appSettings"); //得到[appSettings]节点         try        {            ////得到[appSettings]节点中关于Key的子节点            XmlElement element = (XmlEleme