阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

老司机
查看: 1536|回复: 1

[.Net] 经常分享-读取并修改App.config文件[vs]

[复制链接]
  • TA的每日心情
    开心
    2021-8-30 00:00
  • 签到天数: 35 天

    [LV.5]常住居民I

    发表于 2011-7-9 17:55:43 | 显示全部楼层 |阅读模式
    1. 向项目添加app.config文件:
    右击项目名称,选择“添加”→“添加新建项”,在出现的“添加新项”对话框中,选择“添加应用程序配置文件”;如果项目以前没有配置文件,则默认的文件名称为“app.config”,单击“确定”。出现在设计器视图中的app.config文件为:

      <?xmlversionxmlversion="1.0"encoding="utf-8" ?>
    • <configuration>
    • </configuration>

    在项目进行编译后,在bin\Debuge文件下,将出现两个配置文件(以本项目为例),一个名为“JxcManagement.EXE.config”,另一个名为“JxcManagement.vshost.exe.config”。第一个文件为项目实际使用的配置文件,在程序运行中所做的更改都将被保存于此;第二个文件为原代码“app.config”的同步文件,在程序运行中不会发生更改。
    2. connectionStrings配置节:
    请注意:如果您的SQL版本为2005 Express版,则默认安装时SQL服务器实例名为localhost\SQLExpress,须更改以下实例中“Data Source=localhost;”一句为“Data Source=localhost\SQLExpress;”,在等于号的两边不要加上空格。

      <!--数据库连接串-->
    •      <connectionStrings>

               <clear
      />
    •          <addnameaddname="conJxcBook"

                    connectionString="Data Source=localhost;Initial Catalog=jxcbook;User                                   ID=sa;password=********"
    •               providerName="System.Data.SqlClient"
      />
    •      </connectionStrings>

    3. appSettings配置节:
    appSettings配置节为整个程序的配置,如果是对当前用户的配置,请使用userSettings配置节,其格式与以下配置书写要求一样。

      <!--进销存管理系统初始化需要的参数-->
    •      <appSettings>

               <clear
      />
    •          <addkeyaddkey="userName"value="" />

               <addkeyaddkey="password"value="" />
    •          <addkeyaddkey="Department"value="" />

               <addkeyaddkey="returnValue"value="" />
    •          <addkeyaddkey="pwdPattern"value="" />

               <addkeyaddkey="userPattern"value="" />
    • </appSettings>

    4.读取与更新app.config
    请注意:要使用以下的代码访问app.config文件,除添加引用System.Configuration外,还必须在项目添加对System.Configuration.dll的引用。
    4.1 读取connectionStrings配置节

      ///<summary>
    • ///依据连接串名字connectionName返回数据连接字符串

      ///</summary>
    • ///<param name="connectionName"></param>

      ///<returns></returns>
    • private
      static
      string GetConnectionStringsConfig(string connectionName)
      {  
    • string connectionString =  
              ConfigurationManager.ConnectionStrings[connectionName].ConnectionString.ToString();  
    •     Console.WriteLine(connectionString);
          return connectionString;  
    • }
    4.2 更新connectionStrings配置节

      ///<summary>
    • ///更新连接字符串

      ///</summary>
    • ///<param name="newName">连接字符串名称</param>

      ///<param name="newConString">连接字符串内容</param>
    • ///<param name="newProviderName">数据提供程序名称</param>

      private
      static
      void UpdateConnectionStringsConfig(string newName,  
    •     string newConString,
          string newProviderName)  
    • {
          bool isModified = false;    //记录该连接串是否已经存在
    •     //如果要更改的连接串已经存在

          if (ConfigurationManager.ConnectionStrings[newName] != null)  
    •     {
              isModified = true;  
    •     }
          //新建一个连接字符串实例
    •     ConnectionStringSettings mySettings =  
              new ConnectionStringSettings(newName, newConString, newProviderName);  
    •     // 打开可执行的配置文件*.exe.config

          Configuration config =   
    •         ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
          // 如果连接串已存在,首先删除它
    •     if (isModified)
          {  
    •         config.ConnectionStrings.ConnectionStrings.Remove(newName);
          }  
    •     // 将新的连接串添加到配置文件中.

          config.ConnectionStrings.ConnectionStrings.Add(mySettings);  
    •     // 保存对配置文件所作的更改

          config.Save(ConfigurationSaveMode.Modified);  
    •     // 强制重新载入配置文件的ConnectionStrings配置节

          ConfigurationManager.RefreshSection("ConnectionStrings");  
    • }
    4.3 读取appStrings配置节

      ///<summary>
    • ///返回*.exe.config文件中appSettings配置节的value项

      ///</summary>
    • ///<param name="strKey"></param>

      ///<returns></returns>
    • private
      static
      string GetAppConfig(string strKey)
      {  
    •     foreach (string key in ConfigurationManager.AppSettings)
          {  
    •         if (key == strKey)
              {  
    •             return ConfigurationManager.AppSettings[strKey];
              }  
    •     }
          return
      null;  
    • }
    4.4 更新connectionStrings配置节

      ///<summary>
    • ///在*.exe.config文件中appSettings配置节增加一对键、值对

      ///</summary>
    • ///<param name="newKey"></param>

      ///<param name="newValue"></param>
    • private
      static
      void UpdateAppConfig(string newKey, string newValue)
      {  
    •     bool isModified = false;     
          foreach (string key in ConfigurationManager.AppSettings)  
    •     {
             if(key==newKey)  
    •         {     
                  isModified = true;  
    •         }
          }  
    •     // Open App.Config of executable

          Configuration config =   
    •         ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
          // You need to remove the old settings object before you can replace it
    •     if (isModified)
          {  
    •         config.AppSettings.Settings.Remove(newKey);
          }      
    •     // Add an Application Setting.

          config.AppSettings.Settings.Add(newKey,newValue);     
    •     // Save the changes in App.config file.

          config.Save(ConfigurationSaveMode.Modified);  
    •     // Force a reload of a changed section.

          ConfigurationManager.RefreshSection("appSettings");  
    • }

    • Code
        /// <summary>
    •         /// 写入Key,Value 到XML文件

              /// </summary>
    •         /// <param name="Key"></param>

              /// <param name="Value"></param>
    •         public
      static
      void SaveConfig(string Key,string Value)
              {  
    •             XmlDocument doc = new XmlDocument();
                  //获得配置文件的全路径
    •             string strFileName = AppDomain.CurrentDomain.BaseDirectory.ToString() + "App.config";
                  doc.Load(strFileName);  
    •             //找出名称为“add”的所有元素

                  XmlNodeList nodes = doc.GetElementsByTagName("add");  
    •             for (int i = 0; i < nodes.Count; i++)
                  {  
    •                 //获得将当前元素的key属性

                      XmlAttribute att = nodes.Attributes["key"];  
    •                 //根据元素的第一个属性来判断当前的元素是不是目标元素

                      if (att.Value == Key)  
    •                 {
                          //对目标元素中的第二个属性赋值
    •                     att = nodes.Attributes["value"];

    •                     att.Value = Value;
                          break;  
    •                 }
                  }  
    •             //保存上面的修改

                  doc.Save(strFileName);  

    •         }

    Sunwy注:很多网友代码正确,却不能正确读取配置文件内容,主要是没有添加System.Configuration.dll引用



    该贴已经同步到 sunwy的微博
    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情

    2012-1-28 09:09
  • 签到天数: 99 天

    [LV.6]常住居民II

    发表于 2011-7-9 21:03:10 | 显示全部楼层
    SUNWY大侠对于网络代码的理解已经进入化境。

    点评

    过奖啦,互相学习  发表于 2011-7-10 16:29
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表