ASP.NET中Web.Config配置文件詳解與應用


1.首先是Web.Config配置文件詳解的參數含義(具體內容都在以下代碼中有注釋-我從網上找到的)

 1     public class ConfigData : ConfigurationSection
 2     {
 3         [ConfigurationProperty("ID")]
 4         public string ID 
 5         { 
 6             get { return (string)this["ID"];} 
 7             set {this["ID"]=value;} 
 8         }
 9         [ConfigurationProperty("Value")]
10         public string Value
11         {
12             get { return (string)this["Value"]; }
13             set { this["Value"] = value; }
14         }
15     }
View Code
其中常用的包括全局常量的設置於引用,連接字符串的引用

<!--appSettings是應用程序設置,可以定義應用程序的全局常量設置等信息-->

<appSettings>

<add key="DataSource" value="(local)" />

<add key="InitialCatalog" value="TEST" />

 <add key="UserID" value="sa" />

<add key="Password" value="sa" />
 </appSettings>

<!--連接字符串設置-->

<connectionStrings>

<add name="ConnString" connectionString="Data Source=GAO;Initial Catalog=HBWXDate;Us
er ID=sa;password=sa"></add>

<add name="111" connectionString="11111" />

</connectionStrings>

引用:

  string DataSoruce = ConfigurationManager.AppSettings["DataSource"].ToString();
  string InitialCatalog = ConfigurationManager.AppSettings["InitialCatalog"].ToString();
  string UserID = ConfigurationManager.AppSettings["UserID"].ToString();
  string Password = ConfigurationManager.AppSettings["Password"].ToString();

2.配置數據讀寫操作

2.1 繼承自ConfigurationSection的子類

  只有繼承自ConfigurationSection的對象才能進行配置數據讀寫操作,ConfigurationSection提供了索引器用來獲取和設置配置數據,需要注意的是擁有ConfigurationProperty特性的屬性才會被存儲,並且名稱要保持大小寫完全一致

 1     public class Config : ConfigurationSection
 2     {
 3         [ConfigurationProperty("DataSource")]
 4         public string DataSource
 5         {
 6             get {return (string)this["DataSource"];}
 7             set { this["DataSource"] = value; }
 8         }
 9         [ConfigurationProperty("InitialCatalog")]
10         public string DataSource
11         {
12             get { return (string)this["InitialCatalog"]; }
13             set { this["InitialCatalog"] = value; }
14         }
15         [ConfigurationProperty("UserID")]
16         public string DataSource
17         {
18             get { return (string)this["UserID"]; }
19             set { this["UserID"] = value; }
20         }
21         [ConfigurationProperty("Password")]
22         public string DataSource
23         {
24             get { return (string)this["Password"]; }
25             set { this["Password"] = value; }
26         }
27     }
View Code

  實例化Config類后,就可以通過該類的屬性對配置文件進行讀寫操作了。

2.2 創建配置文件操作對象

1  Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
2  Config data = new Config();//...
3  config.Sections.Add("add", data);//在根節點(configuration)下寫入名稱為"add"的配置數據。
4  config.Save(ConfigurationSaveMode.Minimal);

  如果我們需要操作非缺省配置文件,可以使用ExeConfigurationFileMap對象。(缺省配置文件:指系統默認的配置文件)

  添加

 1 ExeConfigurationFileMap file = new ExeConfigurationFileMap();
 2 file.ExeConfigFilename = "test.config";
 3 Configuration conf = ConfigurationManager.OpenMappedExeConfiguration(file, ConfigurationUserLevel.None);
 4 Config data = new Config();
 5 data.DataSource = "(local)";
 6 data.InitiakCatalog= "DB";
 7 conf.Sections.Add("sql", data);
 8 conf.Save(ConfigurationSaveMode.Minimal);
 9 //如果我們不希望在根節點下寫入配置數據,可以使用ConfigurationSectionGroup對象。
10 
11 ExeConfigurationFileMap file = new ExeConfigurationFileMap();
12 file.ExeConfigFilename = "test.config";
13 Configuration conf = ConfigurationManager.OpenMappedExeConfiguration(file, ConfigurationUserLevel.None);
14 Config data = new Config();
15 data.DataSource= "1000";
16 data.UserID = "sa";
17 conf.SectionGroups.Add("group1", new ConfigurationSectionGroup());
18 conf.SectionGroups["group1"].Sections.Add("add", data);
19 conf.Save(ConfigurationSaveMode.Minimal);

  讀取

 1 ExeConfigurationFileMap file = new ExeConfigurationFileMap();
 2 file.ExeConfigFilename = "test.config";
 3 Configuration conf = ConfigurationManager.OpenMappedExeConfiguration(file, ConfigurationUserLevel.None);
 4 
 5 Config data = conf.SectionGroups["group1"].Sections["add"] as Config;
 6 //Config data = conf.Sections["add"] as Config; // 從根節讀取
 7 
 8 if (data != null)
 9 {
10    //...
11 }

   寫入

  (在寫入 ConfigurationSectionGroup 和 ConfigurationSection 前要判斷同名配置是否已經存在,否則會寫入失敗。
  另外如果配置文件被其他Configuration對象修改,則保存會失敗,並拋出異常。建議采用Singleton模式。) 

 1 ExeConfigurationFileMap file = new ExeConfigurationFileMap();
 2 file.ExeConfigFilename = "test.config";
 3 Configuration config = ConfigurationManager.OpenMappedExeConfiguration(file, ConfigurationUserLevel.None);
 4 
 5 ConfigSectionData data = new ConfigSectionData();
 6 data.Id = 2000;
 7 data.Time = DateTime.Now;
 8 
 9 ConfigurationSectionGroup group1 = config.SectionGroups["group1"];
10 if (group1 == null) 
11   config.SectionGroups.Add("group1", new ConfigurationSectionGroup());
12 
13 ConfigurationSection data = group1.Sections["add"] as config;
14 if (add == null)
15   config.SectionGroups["group1"].Sections.Add("add", data);
16 else
17 {
18   group1.Sections.Remove("add");
19   group1.Sections.Add("add", data);
20 
21   // 或者直接修改原配置對象,前提是類型轉換要成功。
22   //ConfigSectionData configData = add as ConfigSectionData;
23   //configData.Id = data.Id;
24   //configData.Time = data.Time;
25 }
26 
27 config.Save(ConfigurationSaveMode.Minimal);
View Code

  刪除

 1 config.SectionGroups.Remove("group1");
 2 //config.SectionGroups.Clear();
 3 
 4 config.Save(ConfigurationSaveMode.Minimal);
 5 
 6 刪除ConfigurationSection 
 7 config.Sections.Remove("add1");
 8 //config.Sections.Clear();
 9 
10 if (config.SectionGroups["group1"] != null)
11 {
12   config.SectionGroups["group1"].Sections.Remove("add2");
13   //config.SectionGroups["group1"].Sections.Clear();
14 }
15 
16 config.Save(ConfigurationSaveMode.Minimal);
View Code

  其他  

  可以使用 ConfigurationManager.OpenMachineConfiguration() 來操作 Machine.config 文件。或使用 System.Web.Configuration 名字空間中的 WebConfigurationManager 類來操作 ASP.net 配置文件。ConfigurationManager還提供了AppSettings、ConnectionStrings、GetSection()等便捷操作。

  。。。。。。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM