在程序中有一段代码是这样的:
创建数据库->将新数据库的连接字符串写入web.config->读取连接字符串->向新数据库插入一行数据现在代码都写好了,现在的问题是写入web.config也已经写入了,可是读取
string keyNameLocal = "strConFor" + CoNo.ToString() + "Local";
connectionString = System.Configuration.ConfigurationManager.AppSettings[keyNameLocal];
的时候总是提示是null,停止调试,打开web.config查看,的确是写入了,我感觉好像当时写在内存中,读取的好像不是最新的数据
可是 webc.config已经保存了呀;郁闷...关键代码如下:using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Web;
using System.Reflection;public enum ConfigFileType
{
    WebConfig,
    AppConfig
}namespace SalesServer.Operate
{
    /// <summary>
    ///  web.config操作类
    /// </summary>
    public class ReadWriteConfig
    {
        public string docName = String.Empty;
        private XmlNode node = null;
        private int _configType;
        public string message;        public int ConfigType
        {
            get { return _configType; }
            set { _configType = value; }
        }        #region 读取
        public string GetValue(string key)
        {     //读取
            try
            {
                XmlDocument cfgDoc = new XmlDocument();
                loadConfigDoc(cfgDoc);
                // retrieve the appSettings node  
                node = cfgDoc.SelectSingleNode("//appSettings");
                if (node == null)
                {
                    throw new InvalidOperationException("appSettings section not found");
                }
                // XPath select setting "add" element that contains this key to remove      
                XmlElement addElem = (XmlElement)node.SelectSingleNode("//add[@key='" + key + "']");
                if (addElem == null)
                {
                    message = "此key不存在!";
                    return message;
                }
                message = System.Configuration.ConfigurationManager.AppSettings[key];
                return message;
            }
            catch
            {
                message = "操作异常,获取value值失败!";
                return message;
            }
        }
        #endregion        #region 增加
        public string SetValue(string key, string value)
        {   
            XmlDocument cfgDoc = new XmlDocument();
            loadConfigDoc(cfgDoc);
            // retrieve the appSettings node   
            node = cfgDoc.SelectSingleNode("//appSettings");
            if (node == null)
            {
                throw new InvalidOperationException("appSettings section not found");
            }
            try
            {
                // XPath select setting "add" element that contains this key       
                XmlElement addElem = (XmlElement)node.SelectSingleNode("//add[@key='" + key + "']");
                if (addElem != null)
                {
                    message = "此key已经存在!";
                    return message;
                }
                // not found, so we need to add the element, key and value   
                else
                {
                    XmlElement entry = cfgDoc.CreateElement("add");
                    entry.SetAttribute("key", key);
                    entry.SetAttribute("value", value);
                    node.AppendChild(entry);
                }
                //save it   
                saveConfigDoc(cfgDoc, docName);
                message = "添加成功!";
                return message;
            }
            catch
            {
                message = "操作异常,添加失败!";
                return message;
            }
        }        #endregion        #region 保存web.config
        private void saveConfigDoc(XmlDocument cfgDoc, string cfgDocPath)
        {
            try
            {
                XmlTextWriter writer = new XmlTextWriter(cfgDocPath, null);
                writer.Formatting = Formatting.Indented;
                cfgDoc.WriteTo(writer);
                writer.Flush();
                writer.Close();
                return;
            }
            catch
            {
                throw;
            }
        }        #endregion        #region 删除
        public string removeElement(string elementKey)
        { // 删除
            try
            {
                XmlDocument cfgDoc = new XmlDocument();
                loadConfigDoc(cfgDoc);
                // retrieve the appSettings node  
                node = cfgDoc.SelectSingleNode("//appSettings");
                if (node == null)
                {                    throw new InvalidOperationException("appSettings section not found");
                }                XmlElement addElem = (XmlElement)node.SelectSingleNode("//add[@key='" + elementKey + "']");
                if (addElem == null)
                {
                    message = "此key不存在!";
                    return message;
                }
                // XPath select setting "add" element that contains this key to remove      
                node.RemoveChild(node.SelectSingleNode("//add[@key='" + elementKey + "']"));
                saveConfigDoc(cfgDoc, docName);
                message = "删除成功!";
                return message;
            }
            catch
            {
                message = "操作异常,删除失败!";
                return message;
            }
        }
        #endregion        #region 修改
        public string modifyElement(string elementKey, string elementValue)
        { //修改
            try
            {
                XmlDocument cfgDoc = new XmlDocument();
                loadConfigDoc(cfgDoc);
                // retrieve the appSettings node  
                node = cfgDoc.SelectSingleNode("//appSettings");
                if (node == null)
                {
                    throw new InvalidOperationException("appSettings section not found");
                }
                // XPath select setting "add" element that contains this key to remove      
                XmlElement addElem = (XmlElement)node.SelectSingleNode("//add[@key='" + elementKey + "']");
                if (addElem == null)
                {
                    message = "此key不存在!";
                    return message;
                }                addElem.SetAttribute("value", elementValue);
                //save it   
                saveConfigDoc(cfgDoc, docName);
                message = "修改成功!";
                return message;
            }
            catch
            {
                message = "操作异常,修改失败!";
                return message;
            }
        }
        #endregion        #region 加载
        private XmlDocument loadConfigDoc(XmlDocument cfgDoc)
        {
            // load the config file   
            if (Convert.ToInt32(ConfigType) == Convert.ToInt32(ConfigFileType.AppConfig))
            {
                docName = ((Assembly.GetEntryAssembly()).GetName()).Name;
                docName += ".exe.config";
            }
            else
            {
                docName = HttpContext.Current.Server.MapPath("web.config");
            }
            cfgDoc.Load(docName);
            return cfgDoc;
        }
        #endregion    }
}
//写入
ReadWriteConfig config = new ReadWriteConfig();
config.ConfigType = (int)ConfigFileType.WebConfig;
config.SetValue("strConFor" + CoNo.ToString() + "Local", "Persist Security Info=false;InitialCatalog=Sales";User Id=sa;Password=;server=127.0.0.1");
//读取
string keyNameLocal=("strConFor" + CoNo.ToString() + "Local",;
 System.Configuration.ConfigurationManager.AppSettings[keyNameLocal];

解决方案 »

  1.   

    更改后 程序会自动重新加载 config文件 同时 会话自动结束
    可能是还没加载呢 - - 你就读取了  猜测你可以 写 和 读 分开做  用2个事件看看
      

  2.   

    再次搜索之前重载一下...
    System.Configuration.ConfigurationManager.RefreshSection("appSettings");
    string conn = System.Configuration.ConfigurationManager.AppSettings[keyNameLocal];
    ...
      

  3.   


    System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(HttpContext.Current.Server.MapPath("web.config"));
    config.AppSettings.Settings.Add("strConFor", "Persist Security Info=false;InitialCatalog=Sales;User Id=sa;Password=;server=127.0.0.1");
    config.Save(ConfigurationSaveMode.Modified);
    //读取
    string keyNameLocal = "strConFor";
    System.Configuration.ConfigurationManager.RefreshSection("appSettings");
    string conn = System.Configuration.ConfigurationManager.AppSettings[keyNameLocal];
    或者你换个方法,来添加。
      

  4.   

    写和读在同一事件里的话,个人认为在读的时候,重新先读一边配置文件比较合适
        private void ReadConfig()
        {
            Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
            AppSettingsSection sc = (AppSettingsSection)config.GetSection("appSettings");
            string connectionString = sc.Settings[appKeys[keyNameLocal]].Value
        }
      

  5.   

    晕,上面代码顺手写的,忘记返回了connectionString 了
      

  6.   

    配置文件必须是程序重启后才会加载,你如果急着读出来还是不要用WEB。CONFIG,用其它配置文件好了。