zoukankan      html  css  js  c++  java
  • 两种读写配置文件的方案(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 = (XmlElement)node.SelectSingleNode("//add[@key='" + key + "']");
                if (element != null)
                {
                    //存在则更新子节点Value
                    element.SetAttribute("value", value);
                }
                else
                {
                    //不存在则新增子节点
                    XmlElement subElement = doc.CreateElement("add");
                    subElement.SetAttribute("key", key);
                    subElement.SetAttribute("value", value);
                    node.AppendChild(subElement);
                }
                //保存至配置文件(方式一)
                using (XmlTextWriter xmlwriter = new XmlTextWriter(filename, null))
                {
                    xmlwriter.Formatting = Formatting.Indented;
                    doc.WriteTo(xmlwriter);
                    xmlwriter.Flush();
                }
                isSuccess = true;
            }
            catch (Exception ex)
            {
                isSuccess = false;
                throw ex;
            }
            return isSuccess;
        }
        /// <summary>
        /// 更新或新增[connectionStrings]节点的子节点值,存在则更新子节点,不存在则新增子节点,返回成功与否布尔值
        /// </summary>
        /// <param name="configurationFile">要操作的配置文件名称,枚举常量</param>
        /// <param name="name">子节点name值</param>
        /// <param name="connectionString">子节点connectionString值</param>
        /// <param name="providerName">子节点providerName值</param>
        /// <returns>返回成功与否布尔值</returns>
        public static bool UpdateOrCreateConnectionString(ConfigurationFile configurationFile, string name, string connectionString, string providerName)
        {
            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("//connectionStrings"); //得到[connectionStrings]节点 
            try
            {
                ////得到[connectionStrings]节点中关于Name的子节点
                XmlElement element = (XmlElement)node.SelectSingleNode("//add[@name='" + name + "']");
                if (element != null)
                {
                    //存在则更新子节点
                    element.SetAttribute("connectionString", connectionString);
                    element.SetAttribute("providerName", providerName);
                }
                else
                {
                    //不存在则新增子节点
                    XmlElement subElement = doc.CreateElement("add");
                    subElement.SetAttribute("name", name);
                    subElement.SetAttribute("connectionString", connectionString);
                    subElement.SetAttribute("providerName", providerName);
                    node.AppendChild(subElement);
                }
                //保存至配置文件(方式二)
                doc.Save(filename);
                isSuccess = true;
            }
            catch (Exception ex)
            {
                isSuccess = false;
                throw ex;
            }
            return isSuccess;
        }
        /// <summary>
        /// 删除[appSettings]节点中包含Key值的子节点,返回成功与否布尔值
        /// </summary>
        /// <param name="configurationFile">要操作的配置文件名称,枚举常量</param>
        /// <param name="key">要删除的子节点Key值</param>
        /// <returns>返回成功与否布尔值</returns>
        public static bool DeleteByKey(ConfigurationFile configurationFile, string key)
        {
            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]节点 
            ////得到[appSettings]节点中关于Key的子节点
            XmlElement element = (XmlElement)node.SelectSingleNode("//add[@key='" + key + "']");
            if (element != null)
            {
                //存在则删除子节点
                element.ParentNode.RemoveChild(element);
            }
            else
            {
                //不存在
            }
            try
            {
                //保存至配置文件(方式一)
                using (XmlTextWriter xmlwriter = new XmlTextWriter(filename, null))
                {
                    xmlwriter.Formatting = Formatting.Indented;
                    doc.WriteTo(xmlwriter);
                    xmlwriter.Flush();
                }
                isSuccess = true;
            }
            catch (Exception ex)
            {
                isSuccess = false;
            }
            return isSuccess;
        }
        /// <summary>
        /// 删除[connectionStrings]节点中包含name值的子节点,返回成功与否布尔值
        /// </summary>
        /// <param name="configurationFile">要操作的配置文件名称,枚举常量</param>
        /// <param name="name">要删除的子节点name值</param>
        /// <returns>返回成功与否布尔值</returns>
        public static bool DeleteByName(ConfigurationFile configurationFile, string name)
        {
            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("//connectionStrings"); //得到[connectionStrings]节点 
            ////得到[connectionStrings]节点中关于Name的子节点
            XmlElement element = (XmlElement)node.SelectSingleNode("//add[@name='" + name + "']");
            if (element != null)
            {
                //存在则删除子节点
                node.RemoveChild(element);
            }
            else
            {
                //不存在
            }
            try
            {
                //保存至配置文件(方式二)
                doc.Save(filename);
                isSuccess = true;
            }
            catch (Exception ex)
            {
                isSuccess = false;
            }
            return isSuccess;
        }
    }
    

    更多IT相关技术文章与资讯,欢迎光临我的个人网站:http://www.zuowenjun.cn

  • 相关阅读:
    算法初步——贪心
    sql去除重复记录 且保留id最小的 没用
    项目二:品优购 第三天
    Restful
    lucene 第一天
    lucene和solr
    zookeeper 面试题 有用
    dubbo 相关面试题 有用
    webservice CXF 相关面试题
    POI技术
  • 原文地址:https://www.cnblogs.com/zuowj/p/4398841.html
Copyright © 2011-2022 走看看