The ConfigurationManager class provides a convenient way to manage application settings and connection strings in .NET applications.
Namespace and Assembly
- Namespace:
System.Configuration - Assembly:
System.Configuration(inSystem.Configuration.dll)
Working with Application Settigns
To use ConfigurationManager, add a referecne to the System.Configuration assembly in your project. Application key-value pairs are typically stored in App.config (for desktop apps) or Web.config (for web apps).
Reading, Addding, and Updating Settings
The following example demonstrates common operations: listing all settings, reading a specific key, and adding or updating a value.
using System;
using System.Configuration;
namespace ConfigTool
{
class Program
{
static void Main(string[] args)
{
EnumerateSettings();
FetchSetting("Setting1");
FetchSetting("InvalidKey");
WriteOrReplaceSetting("NewSetting", "2024-07-10");
WriteOrReplaceSetting("Setting1", "2024-07-11");
EnumerateSettings();
}
static void EnumerateSettings()
{
try
{
var appSettings = ConfigurationManager.AppSettings;
if (appSettings.Count == 0)
{
Console.WriteLine("No application settings found.");
}
else
{
foreach (var key in appSettings.AllKeys)
{
Console.WriteLine("Key: {0} | Value: {1}", key, appSettings[key]);
}
}
}
catch (ConfigurationErrorsException)
{
Console.WriteLine("Failed to read settings.");
}
}
static void FetchSetting(string key)
{
try
{
var appSettings = ConfigurationManager.AppSettings;
string value = appSettings[key] ?? "Not Present";
Console.WriteLine(value);
}
catch (ConfigurationErrorsException)
{
Console.WriteLine("Error accessing settings.");
}
}
static void WriteOrReplaceSetting(string key, string value)
{
try
{
var cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var pairs = cfg.AppSettings.Settings;
if (pairs[key] == null)
{
pairs.Add(key, value);
}
else
{
pairs[key].Value = value;
}
cfg.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection(cfg.AppSettings.SectionInformation.Name);
}
catch (ConfigurationErrorsException)
{
Console.WriteLine("Error modifying settings.");
}
}
}
}
Example App.config content:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<appSettings>
<add key="Setting1" value="May 5, 2014"/>
<add key="Setting2" value="May 6, 2014"/>
</appSettings>
</configuration>
Using Connection Strings
Connection strings are defined in a dedicated <connectionStrings> section. The example below reads a connection string and queries a database.
using System;
using System.Configuration;
using System.Data.SqlClient;
namespace DataAccess
{
class Program
{
static void Main(string[] args)
{
LoadProductList();
}
static void LoadProductList()
{
var connString = ConfigurationManager.ConnectionStrings["WingtipToys"].ConnectionString;
string sql = "SELECT Id, ProductName FROM dbo.Products;";
using (var conn = new SqlConnection(connString))
{
var cmd = new SqlCommand(sql, conn);
conn.Open();
using (var rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
Console.WriteLine(String.Format("{0}, {1}", rdr[0], rdr[1]));
}
}
}
}
}
}
Corresponding App.config section:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<connectionStrings>
<add name="WingtipToys" connectionString="Data Source=(LocalDB)\v11.0;Initial Catalog=WingtipToys;Integrated Security=True;Pooling=False" />
</connectionStrings>
</configuration>