C#读写参数到APP.Config

C#读写参数到APP.Config

  • 介绍
  • 程序Demo
  • 常见错误

介绍

系统在开发时,可能需要设置默认参数,比如数据库的链接参数,某个参数的默认数据等等。对于这些数据,可直接在app.config中读取。

在读写时,需要先了解configurationmanager类。

命名空间:System.Configuration 程序集: System.Configuration.dll

此类的作用为提供对客户端应用程序配置文件的访问。 此类不能被继承。

属性 描述
AppSettings 获取当前应用程序默认配置的AppSettingSection数据
ConnectionStrings 获取当前应用程序默认配置的AppSettingSection数据
方法 描述
GetSection 检索当前应用程序默认配置的指定配置节
OpenExeConfiguration 检索当前应用程序默认配置的指定配置节
OpenMachineConfiguration 将当前计算机的配置文件作为 Configuration 对象打开。
OpenMappedExeConfiguration 将当前计算机的配置文件作为 Configuration 对象打开。
OpenMappedMachineConfiguration 将计算机配置文件作为 Configuration对象打开,该对象使用指定的文件映射。
RefreshSection 刷新命名节,这样在下次检索它时将从磁盘重新读取它。

程序Demo

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace demo132_APP.config的读写
{
    class Program
    {
        static void Main(string[] args)
        {

            ReadAllSetting();
            ReadSetting("a");
            ReadSql();
 
            Console.ReadKey();
            //使用connectionStrings,常用于设置数据库链接参数

        }
        static void ReadAllSetting()
        {
            //读取App.config中Appsettingsection数据
            try
            {
                var appsettings = ConfigurationManager.AppSettings;
                if(appsettings.Count==0)
                {
                    Console.WriteLine("AppSetting is empty");
                }
                else
                {
                    foreach(var key in appsettings.AllKeys)
                    {
                        Console.WriteLine("Key:{0},Value:{1}", key, appsettings[key]);
                    }
                }
            }
            catch(ConfigurationErrorsException)
            {
                Console.WriteLine("Error Reading Appsettings");
            }
        }
        static void ReadSetting(string key)
        {
            //根据key值,读取appsettings中的值
            try
            {
                var appsetting = ConfigurationManager.AppSettings;
                string result = appsetting[key] ?? "Not Found";//??代表当appsetting为null时,result为Not Found,否则为appsetting[key]
                Console.WriteLine(result);
            }
            catch(ConfigurationErrorsException)
            {
                Console.WriteLine("Error reading Appsetting");
            }


        }
        static void AddUpdateSettings(string key,string value)
        {
            try
            {
                var configfile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                var settings = configfile.AppSettings.Settings;
                if(settings[key]==null)
                {
                    settings.Add(key, value);
                }
                else
                {
                    settings[key].Value = value;
                }
                configfile.Save(ConfigurationSaveMode.Modified);
                ConfigurationManager.RefreshSection(configfile.AppSettings.SectionInformation.Name);
            }
            catch(ConfigurationErrorsException)
            {
                Console.WriteLine("Error reading in Appsettings");
            }
        }
        static void ReadSql()
        {
            try
            {
                var sqlcon = ConfigurationManager.ConnectionStrings["Sqlcon"].ConnectionString;
                if(sqlcon != null)
                {
                    Console.WriteLine(sqlcon.ToString());
                }
                else
                {
                    Console.WriteLine("Nothing");
                }
            }
            catch(ConfigurationErrorsException)
            {
                Console.WriteLine("Error in connectionstring");
            }
            
            
        }
    }
}

常见错误

使用App.config配置参数,读取参数出现错误

“System.Configuration.ConfigurationErrorsException”类型的未经处理的异常在 System.Configuration.dll 中发生。其他信息: 配置系统未能初始化

解决办法:如果配置文件中包含 configSections 元素,则 configSections 元素必须是 configuration 元素的第一个子元素。",将appSettings放到configSections 后,则正常。

C#读写参数到APP.Config_第1张图片

你可能感兴趣的:(c#)