在一WINFORM的APP.CONFIG里有数据库连接字符串,比如原先是12345,然后我在程序里将其改成67890,保存后,重新用ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;读取,但读出来的还是12345,我猜是从缓存里读的,但文件里已经是67890了,有个 ConfigurationManager.RefreshSection("connectionStrings");也用过,无效,要吧程序关掉,再开,才能读出67890.有谁知道怎么让他重新去读磁盘上的文件吗

解决方案 »

  1.   

    ConfigurationManager读取config文件的配制,微软确实做了文件依赖缓存。这个应该和你的程序执行方式有关系,程序执行的时候连接字符串已经读取出来了,如果你改配置了,程序又没有重新初始化下连接字符串当然是没修改之前的了。
      

  2.   

    绝对保存的,而且文件打开看过,也改掉了已经
    bool isExisted = false;
    ConnectionStringSettings mySettings = new ConnectionStringSettings("ConnStr","123456", "System.Data.SqlClient");
    if (ConfigurationManager.ConnectionStrings["hotelConnStr"] != null)
    {
         isExisted = true;
    }
    string str = ConfigurationManager.ConnectionStrings["hotelConnStr"].ConnectionString;
    string path = Application.StartupPath + "\\WindowsApplication2.exe";
    Configuration config = ConfigurationManager.OpenExeConfiguration(path);
    if (isExisted == true)
    {
       config.ConnectionStrings.ConnectionStrings.Remove("hotelConnStr");
    }
    config.ConnectionStrings.ConnectionStrings.Add(mySettings);
    config.Save(ConfigurationSaveMode.Modified);
    ConfigurationManager.RefreshSection("connectionStrings");
    textBox1.Text = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
    这是程序,有谁能看看问题出在哪吗,貌似网上也没解决方案
      

  3.   

    T-bag说的没错,我同意他的观点!
      

  4.   

    我建议你将bin目录下的Debug下面的APP.CONFIG里面的数据连接也手动改下!~
    经常遇到.
      

  5.   

    重启程序是最简单办法,有谁会没事去更改config文件啊.如果有其他的动态的设置,那就别进config文件了,自定义一个XML即可
      

  6.   

    CONFIG改了之后,是不会自动更新的,所以呢,最好不要用那个config文件
      

  7.   

    搞定了,程序没问题,问题是在调试模式时候必须还要更新BIN下面的那个"程序名.vshost.exe.config",这样的话,用RefreshSection后才会读到新的连接字符串.但如果直接双击那个EXE执行的话,就只要直接改"程序名.exe.config"就可以了,RefreshSection后就能读到新值
      

  8.   

    ConfigurationManager.RefreshSection 方法 很好,还没有用过这个方法,学习了:)