C#中读取和更改APP.config配置文件?

Mr.Huang…… 2012-07-05 10:14:39
配置文件如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connection>
<add name="ServerName" connectionString=".\sql2000" />
<add name="DataBaseName" connectionString="pubs"/>
<add name="UserID" connectionString="sa"/>
<add name="PassWord" connectionString=""/>
</connection>
</configuration>

怎样读取和更改这个配置文件?
...全文
4467 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
源码有么 我也学习学习
friwhibo 2013-07-17
  • 打赏
  • 举报
回复
楼主,能不能完整贴一下代码,我学一下 另外,您的config文件属性里的生成操作是啥?嵌入式?或是无?程序生成后连接数据库的参数怎么保密?
kunkun0921 2012-07-05
  • 打赏
  • 举报
回复

public class ConfigHelper
{

/// <summary>
/// 根据键值获取配置文件
/// </summary>
/// <param name="key">键值</param>
/// <returns></returns>
public static string GetConfig(string key)
{
string val = string.Empty;
if (ConfigurationManager.AppSettings.AllKeys.Contains(key))
val = ConfigurationManager.AppSettings[key];
return val;
}



/// <summary>
/// 获取所有配置文件
/// </summary>
/// <returns></returns>
public static Dictionary<string, string> GetConfig()
{
Dictionary<string, string> dict = new Dictionary<string, string>();
foreach (string key in ConfigurationManager.AppSettings.AllKeys)
dict.Add(key, ConfigurationManager.AppSettings[key]);
return dict;
}



/// <summary>
/// 根据键值获取配置文件
/// </summary>
/// <param name="key">键值</param>
/// <param name="defaultValue">默认值</param>
/// <returns></returns>
public static string GetConfig(string key, string defaultValue)
{
string val = defaultValue;
if (ConfigurationManager.AppSettings.AllKeys.Contains(key))
val = ConfigurationManager.AppSettings[key];
if (val == null)
val = defaultValue;
return val;
}



/// <summary>
/// 写配置文件,如果节点不存在则自动创建
/// </summary>
/// <param name="key">键值</param>
/// <param name="value">值</param>
/// <returns></returns>
public static bool SetConfig(string key, string value)
{

try
{
Configuration conf = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
if (!conf.AppSettings.Settings.AllKeys.Contains(key))
conf.AppSettings.Settings.Add(key, value);
else
conf.AppSettings.Settings[key].Value = value;
conf.Save();
return true;
}
catch { return false; }
}



/// <summary>
/// 写配置文件(用键值创建),如果节点不存在则自动创建
/// </summary>
/// <param name="dict">键值集合</param>
/// <returns></returns>

public static bool SetConfig(Dictionary<string, string> dict)
{
try
{
if (dict == null || dict.Count == 0)
return false;
Configuration conf = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
foreach (string key in dict.Keys)
{
if (!conf.AppSettings.Settings.AllKeys.Contains(key))
conf.AppSettings.Settings.Add(key, dict[key]);
else
conf.AppSettings.Settings[key].Value = dict[key];
}
conf.Save();
return true;
}
catch { return false; }
}

}
ccbphi 2012-07-05
  • 打赏
  • 举报
回复 1
通过操作xml文件实现修改配置文件中ip的值

System.Xml.XmlDocument xDoc = new System.Xml.XmlDocument();
xDoc.Load(System.Windows.Forms.Application.ExecutablePath + ".config");//载入文件

System.Xml.XmlNode xNode;
System.Xml.XmlElement xElemip;
System.Xml.XmlElement xElem2;
xNode = xDoc.SelectSingleNode("//appSettings");
xElemip = (System.Xml.XmlElement)xNode.SelectSingleNode("//add[@key='IP']");

if (xElemip != null) xElemip.SetAttribute("value","修改的值" );
else
{
xElem2 = xDoc.CreateElement("add");
xElem2.SetAttribute("key", "IP");
xElem2.SetAttribute("value", "写入的值");
xNode.AppendChild(xElem2);
}
xDoc.Save(System.Windows.Forms.Application.ExecutablePath + ".config");
brightfran 2012-07-05
  • 打赏
  • 举报
回复
config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
string conn = config.ConnectionStrings.ConnectionStrings["ServerName"].ConnectionString;

string conn = "新的值";

config.ConnectionStrings.ConnectionStrings["ServerName"].ConnectionString = conn;
config.Save();
brightfran 2012-07-05
  • 打赏
  • 举报
回复
Configuration config;
config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
string conn = config.ConnectionStrings.ConnectionStrings["名称"].ConnectionString;

string conn = "新的值";
config.ConnectionStrings.ConnectionStrings["名称"].ConnectionString = conn;
config.Save();
ycproc 2012-07-05
  • 打赏
  • 举报
回复

//读取web.config节点配置
string connectionString = ConfigurationManager.ConnectionStrings["notes"].ConnectionString;
//实例化SqlConnection对象
SqlConnection connection = new SqlConnection(connectionString);
熙风 2012-07-05
  • 打赏
  • 举报
回复

或者操作xml来获取和修改
/// <summary>
/// 获取指定节点下面对应属性的值
/// </summary>
/// <param name="strFileName">文件路径</param>
/// <param name="nodeName">节点名称</param>
/// <param name="nodeDir">指定节点所在的节点目录</param>
/// <param name="attribute">节点对应的属性名称</param>
/// <returns></returns>
public static string GetNodeValue(string strFileName, string nodeName, string nodeDir, string attribute)
{
string value = null;
try
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(strFileName);

XmlNodeList nodeList = xmlDoc.SelectSingleNode(nodeDir).ChildNodes;//获取bookstore节点的所有子节点

foreach (XmlNode xn in nodeList) //遍历所有子节点
{
XmlElement xe = (XmlElement)xn; //将子节点类型转换为XmlElement类型

if (xe.Name == nodeName)
{
//value = xe.InnerText.Trim();
value = (xe).Attributes[attribute].Value;
break;
}
}
}
catch (Exception exp)
{
throw exp;
}

return value;
}

/// <summary>
/// 修改指定结点值
/// </summary>
/// <param name="strFileName">文件路径</param>
/// <param name="nodeName">节点名称</param>
/// <param name="value">设置后的值</param>
/// <param name="nodeDir">指定节点所在的节点目录</param>
/// <returns></returns>
public static bool UpdateNoteValue(string strFileName, string nodeName, string value, string nodeDir)
{
bool isSucceed = false;
try
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(strFileName);

XmlNodeList nodeList = xmlDoc.SelectSingleNode(nodeDir).ChildNodes;//获取bookstore节点的所有子节点

foreach (XmlNode xn in nodeList) //遍历所有子节点
{
XmlElement xe = (XmlElement)xn; //将子节点类型转换为XmlElement类型

if (xe.Name == nodeName)
{
xe.InnerText = value;

isSucceed = true;
break;
}
}

xmlDoc.Save(strFileName);
}
catch (Exception exp)
{
throw exp;
}

return isSucceed;
}
熙风 2012-07-05
  • 打赏
  • 举报
回复
获取
string ServerName= ConfigurationManager.ConnectionStrings["ServerName"].ConnectionString;//ServerName== add节点的name
其他同理
Mr.Huang…… 2012-07-05
  • 打赏
  • 举报
回复
ConfigurationManager.RefreshSection("connectionStrings");

谢谢大家,问题解决了
Mr.Huang…… 2012-07-05
  • 打赏
  • 举报
回复
***.exe.config 数据变了的
***.vshost.exe.config 数据没变

在程序界面上我是单独做了一个form2窗口进行数据库连接配置,点了保存后,关闭form2窗口,然后再打开form2窗口,数据还是修改之前的,必须要把程序关了,然后再按ctrl+f5执行看到的数据就是修改后的了,怎么回事呢?

form2窗体加载的时候就会读取配置文件,那我关闭窗口后再打开窗口就应该看到修改后的数据噻,现在要退了程序再进程序才行,怎么回事情哦?
Mr.Huang…… 2012-07-05
  • 打赏
  • 举报
回复

我初学这个,很多东西不懂
kunkun0921 2012-07-05
  • 打赏
  • 举报
回复
如果这样有困难的话,你可以选择使用XML作为配置文件。
Mr.Huang…… 2012-07-05
  • 打赏
  • 举报
回复
***.exe.config 数据变了的
***.vshost.exe.config 数据没变

在程序界面上我是单独做了一个form2窗口进行数据库连接配置,点了保存后,关闭form2窗口,然后再打开form2窗口,数据还是修改之前的,必须要把程序关了,然后再按ctrl+f5执行看到的数据就是修改后的了,怎么回事呢?
zagj11 2012-07-05
  • 打赏
  • 举报
回复
C#修改app.config配置文件信息//更新app.config的函数

private void UpdateConfig(string Xvalue)
{
XmlDocument doc = new XmlDocument();
doc.Load(Application.ExecutablePath+".config");
XmlNode node = doc.SelectSingleNode(@"//add[@key='ServerName']");
XmlElement ele = (XmlElement)node;
ele.SetAttribute("value",Xvalue);
doc.Save(Application.ExecutablePath+".config");
}

//配置文件的源文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ServerName" value=""/>
</appSettings>
</configuration>

zagj11 2012-07-05
  • 打赏
  • 举报
回复
//------------------------------------------------------------
// All Rights Reserved , Copyright (C) 2010 , CDPF , Ltd.
//------------------------------------------------------------

using System;
using System.Configuration;
using System.Windows.Forms;
using Utilities;

namespace DirectSeeding
{
/// <summary>
/// FrmConfig
/// 读取配置文件
///
/// 修改纪录
///
/// 2011.01.14 版本: 1.0 JiRiGaLa 完善程序的注释等、从新整理代码。
///
/// 版本:1.0
///
/// <author>
/// <name>JiRiGaLa</name>
/// <date>2011.01.14</date>
/// </author>
/// </summary>
public partial class FrmConfig : Form
{
public FrmConfig()
{
InitializeComponent();
}

/// <summary>
/// 读取配置文件
/// </summary>
private void GetConfig()
{
this.txtWriteFileName.Text = ConfigurationManager.AppSettings["WriteFileName"];
this.txtWritePath.Text = ConfigurationManager.AppSettings["WritePath"].Replace("|", Environment.NewLine);
this.txtPostMessageURL.Text = ConfigurationManager.AppSettings["PostMessageURL"];
this.txtLeasedLineURL.Text = ConfigurationManager.AppSettings["LeasedLineURL"];
}

private void FrmDirectSeeding_Load(object sender, EventArgs e)
{
this.GetConfig();
}

/// <summary>
/// 保存配置文件
/// </summary>
private void SaveConfig()
{
// 写入参数设置 www.wanxinyi.com
Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
configuration.AppSettings.Settings["WriteFileName"].Value = this.txtWriteFileName.Text;
configuration.AppSettings.Settings["WritePath"].Value = this.txtWritePath.Text.Trim().Replace(Environment.NewLine, "|");
configuration.AppSettings.Settings["PostMessageURL"].Value = this.txtPostMessageURL.Text;
configuration.AppSettings.Settings["LeasedLineURL"].Value = this.txtLeasedLineURL.Text;
configuration.Save();

// 重新读取参数
ConfigurationManager.RefreshSection("appSettings");
WriteFile.WriteFileName = ConfigurationManager.AppSettings["WriteFileName"];
WriteFile.WritePath = ConfigurationManager.AppSettings["WritePath"].Split('|');
PostMessage.PostMessageURL = ConfigurationManager.AppSettings["PostMessageURL"];
// PostMessage.LeasedLineURL = ConfigurationManager.AppSettings["LeasedLineURL"];
}

private void btnSavaConfig_Click(object sender, EventArgs e)
{
// 保存设置 www.shiapifa.com
SaveConfig();
}
}
}
熙风 2012-07-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

public void UpdateConnectionStringsConfig(string Update_S, string Update_D, string Update_U,string Update_P)
{
Configuration config =ConfigurationManager.OpenExeConfigu……
[/Quote]

你要看生成后的config文件,,,

命名空间.vshost.exe.config
Mr.Huang…… 2012-07-05
  • 打赏
  • 举报
回复
public void UpdateConnectionStringsConfig(string Update_S, string Update_D, string Update_U,string Update_P)
{
Configuration config =ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.ConnectionStrings.ConnectionStrings["ServerName"].ConnectionString = Update_S;
config.ConnectionStrings.ConnectionStrings["DataBaseName"].ConnectionString = Update_D;
config.ConnectionStrings.ConnectionStrings["UserId"].ConnectionString = Update_U;
config.ConnectionStrings.ConnectionStrings["PassWord"].ConnectionString = Update_P;
config.Save();
}
Mr.Huang…… 2012-07-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

Configuration config;
config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
string conn = config.ConnectionStrings.ConnectionStrings["名称"]……
[/Quote]


这样子做不到更新呢
public void UpdateConnectionStringsConfig(string Update_S, string Update_D, string Update_U,string Update_P)
{
Configuration config =ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.ConnectionStrings.ConnectionStrings["ServerName"].ConnectionString = Update_S;
config.ConnectionStrings.ConnectionStrings["DataBaseName"].ConnectionString = Update_S;
config.ConnectionStrings.ConnectionStrings["UserId"].ConnectionString = Update_S;
config.ConnectionStrings.ConnectionStrings["PassWord"].ConnectionString = Update_S;
config.Save();
}

110,580

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧