200分求救 winform修改App.config

heavilyarmed 2009-10-27 09:16:44
做了个项目要打包了,链接数据库是通过app.config 链接的
到了客户端要 客户自己选择数据库的链接

有两个问题
一: 在调用SaveConfig方法的时候 没有更改源文件的内容
二: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

请各位帮忙看看吧


数据库服务器名称
用户名
密码
数据库名称

下面是app.config文件信息

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings></connectionStrings>
<appSettings>
<add key="Server" value=" "/>
<add key="initial catalog" value=" "></add>
<add key="uid" value=" "></add>
<add key="pwd" value=" "></add>
</appSettings>
</configuration>


在修改文件的时候 用的方法是

#region 方法保存修改的设置
/// <summary>
/// 方法保存修改的设置
/// </summary>
/// <param name="ConnenctionString"></param>
/// <param name="strKey"></param>
private void SaveConfig(string ConnenctionString, string strKey)
{
XmlDocument doc = new XmlDocument();
//获得配置文件的全路径
string strFileName = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
doc.Load(strFileName);
//找出名称为“add”的所有元素
XmlNodeList nodes = doc.GetElementsByTagName("add");
for (int i = 0; i < nodes.Count; i++)
{
//获得将当前元素的key属性
XmlAttribute att = nodes[i].Attributes["key"];
//根据元素的第一个属性来判断当前的元素是不是目标元素
if (att.Value == strKey)
{
//对目标元素中的第二个属性赋值
att = nodes[i].Attributes["value"];
att.Value = ConnenctionString;
break;
}
}
//保存上面的修改
doc.Save(strFileName);
}
#endregion

//调用方法修改app.config文件
private void btnOK_Click_1(object sender, EventArgs e)
{
SaveConfig("WWW-8CB7FB23DD4","Server");
SaveConfig("myehrce","initial catalog");
SaveConfig("sa", "uid");
SaveConfig("123","pwd");
}

...全文
2327 51 打赏 收藏 转发到动态 举报
写回复
用AI写文章
51 条回复
切换为时间正序
请发表友善的回复…
发表回复
netaass123 2011-07-01
  • 打赏
  • 举报
回复
学习。。。。。
傲世波波 2011-06-03
  • 打赏
  • 举报
回复
请问你是怎么做到的
lzsh0622 2009-10-27
  • 打赏
  • 举报
回复
楼主改一下试试:
string strFileName = AppDomain.CurrentDomain.BaseDirectory + "\\app.config";
huxili 2009-10-27
  • 打赏
  • 举报
回复
来学习的
风之影子 2009-10-27
  • 打赏
  • 举报
回复
有时候没改,你每次改了后,只有你程序完全退出,下次启动后再去看才会改。这就是app.config的机制。

故两种方案,一种是你如果想即时提取改的值,那就借用公共的属性加上判断来做。

第二种方案,就是建一个不是以app.config命名的来即时提取。

第三种方案,改用其它的磁盘文件如ini,txt,等
heavilyarmed 2009-10-27
  • 打赏
  • 举报
回复
改是改了,

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="Server" value="WWW-8CB7FB23DD4" />
<add key="initial catalog" value="myehrce">
</add>
<add key="uid" value="sa">
</add>
<add key="pwd" value="123">
</add>
</appSettings>
</configuration>


可是有的时候 又不能修改

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="Server" value="WWW-8CB7FB23DD4"/>
<add key="initial catalog" value="myehrce "></add>
<add key="uid" value="sa"></add>
<add key="pwd" value=" "></add>
</appSettings>
</configuration>
flyerwing 2009-10-27
  • 打赏
  • 举报
回复
ConfigurationManager.AppSettings.Set("TITLE", "中国人民大团结!");

这样不行吗?
风之影子 2009-10-27
  • 打赏
  • 举报
回复
就是读 修改app.vshost.exe.config


那就这样吧,你做个很简单的改变。
你重新添加一个xml(名称不要用app.config),放在你的debug下面。

你真接操作你添加的这个,这个会即时改变的。因为app.config是应用程序的特殊XML配置文件。

这样做一下,你的程序就没有问题了。
至于app.config文件里的为什么没有改,23楼我给你写过了。之后你可以再查找资料了解一下。
heavilyarmed 2009-10-27
  • 打赏
  • 举报
回复
就是读 修改app.vshost.exe.config
heavilyarmed 2009-10-27
  • 打赏
  • 举报
回复
但是,是名字是:修改app.vshost.exe.config

我的测试项目名称是:修改app

可是我读取的是 app.config 这怎么让读另外一个呢
风之影子 2009-10-27
  • 打赏
  • 举报
回复
你确定你不是自己命名添加的app.config吗?

注意大小写appconfig和App.config是不一样的。
之前我的项目也一直因为这个最后才发现是因为手工添中xml再命名导致的。

首先可以排除的是你的修改方法没有问题。
你单步调试再试一下你代码修改的执行过程。
charles_y 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 heavilyarmed 的回复:]
自己顶下,
为什么不能修改xml文件呢
[/Quote]

因为app.config 不是一般的xml文件,它是程序正在使用的文件
heavilyarmed 2009-10-27
  • 打赏
  • 举报
回复
改了!!!!
heavilyarmed 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 libinguest 的回复:]
你重启后应该就改了,不要看你的app.config文件,那里是不会改的,
你得去看debug下面以程序集命名.config文件。
看那里面是否改了。
[/Quote]

看的是那里的,还是没有改
风之影子 2009-10-27
  • 打赏
  • 举报
回复
你重启后应该就改了,不要看你的app.config文件,那里是不会改的,
你得去看debug下面以程序集命名.config文件。
看那里面是否改了。
heavilyarmed 2009-10-27
  • 打赏
  • 举报
回复
自己再顶
heavilyarmed 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 libinguest 的回复:]
是什么意思??

也就是你不要手工添加一个新建xml再把xml的名称改为app.config。
这样是不行的。同时注意大小写,
你需要通过添加新项-----应用程序配置文件,会自动在你的项目命名空间下添加App.config文件
[/Quote]

谢谢了,不过为什么还是不能更改文件呢
heavilyarmed 2009-10-27
  • 打赏
  • 举报
回复
引用23楼

app.config文件的值,是在修改后,再进行重启后,才会反应到你的app.config文件里.并且只会反应到你.exe所在的debug目录下,在debug目录下找一个(程序集名称.config文件),用记事本打开看看。

没有改·······,怎么办啊
风之影子 2009-10-27
  • 打赏
  • 举报
回复
是什么意思??

也就是你不要手工添加一个新建xml再把xml的名称改为app.config。
这样是不行的。同时注意大小写,
你需要通过添加新项-----应用程序配置文件,会自动在你的项目命名空间下添加App.config文件
heavilyarmed 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 libinguest 的回复:]
引用 21 楼 heavilyarmed 的回复:
自己顶下,
为什么不能修改xml文件呢


你试着在修改完APP.config文件后,把你的程序关了,重新启动一下,再读取。应该是修改了。

app.config文件的值,是在修改后,再进行重启后,才会反应到你的app.config文件里.并且只会反应到你.exe所在的debug目录下,在debug目录下找一个(程序集名称.config文件),用记事本打开看看。

还有,在此操作过程中,你的app.config文件要通过添加应用程序配置文件来添加,不要手工添加新建项来命名添加。
[/Quote]

是什么意思??
加载更多回复(31)

110,546

社区成员

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

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

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