1. 程式人生 > 其它 >獲取或設定Web.config/*.exe.config中節點資料

獲取或設定Web.config/*.exe.config中節點資料

/// <summary>
/// 用於獲取或設定Web.config/*.exe.config中節點資料的輔助類
/// </summary>
public sealed class AppConfig
{
private string filePath;

/// <summary>
/// 從當前目錄中按順序檢索Web.Config和*.App.Config檔案。
/// 如果找到一個,則使用它作為配置檔案;否則會丟擲一個ArgumentNullException異常。
/// </summary>
public AppConfig()
{
string webconfig = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Web.Config");
string appConfig = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile.Replace(".vshost", "");

if (File.Exists(webconfig))
{
filePath = webconfig;
}
else if (File.Exists(appConfig))
{
filePath = appConfig;
}
else
{
throw new ArgumentNullException("沒有找到Web.Config檔案或者應用程式配置檔案, 請指定配置檔案");
}
}

/// <summary>
/// 使用者指定具體的配置檔案路徑
/// </summary>
/// <param name="configFilePath">配置檔案路徑(絕對路徑)</param>
public AppConfig(string configFilePath)
{
filePath = configFilePath;
}

/// <summary>
/// 設定程式的config檔案
/// </summary>
/// <param name="keyName">鍵名</param>
/// <param name="keyValue">鍵值</param>
public void AppConfigSet(string keyName, string keyValue)
{
//由於存在多個Add鍵值,使得訪問appSetting的操作不成功,故註釋下面語句,改用新的方式
/*
string xpath = "//add[@key='" + keyName + "']";
XmlDocument document = new XmlDocument();
document.Load(filePath);

XmlNode node = document.SelectSingleNode(xpath);
node.Attributes["value"].Value = keyValue;
document.Save(filePath);
*/

XmlDocument document = new XmlDocument();
document.Load(filePath);

XmlNodeList nodes = document.GetElementsByTagName("add");
for (int i = 0; i < nodes.Count; i++)
{
//獲得將當前元素的key屬性
XmlAttribute attribute = nodes[i].Attributes["key"];
//根據元素的第一個屬性來判斷當前的元素是不是目標元素
if (attribute != null && (attribute.Value == keyName))
{
attribute = nodes[i].Attributes["value"];
//對目標元素中的第二個屬性賦值
if (attribute != null)
{
attribute.Value = keyValue;
break;
}
}
}
document.Save(filePath);
}

/// <summary>
/// 讀取程式的config檔案的鍵值。
/// 如果鍵名不存在,返回空
/// </summary>
/// <param name="keyName">鍵名</param>
/// <returns></returns>
public string AppConfigGet(string keyName)
{
string strReturn = string.Empty;
try
{
XmlDocument document = new XmlDocument();
document.Load(filePath);

XmlNodeList nodes = document.GetElementsByTagName("add");
for (int i = 0; i < nodes.Count; i++)
{
//獲得將當前元素的key屬性
XmlAttribute attribute = nodes[i].Attributes["key"];
//根據元素的第一個屬性來判斷當前的元素是不是目標元素
if (attribute != null && (attribute.Value == keyName))
{
attribute = nodes[i].Attributes["value"];
if (attribute != null)
{
strReturn = attribute.Value;
break;
}
}
}
}
catch
{
;
}

return strReturn;
}

/// <summary>
/// 獲取指定鍵名中的子項的值
/// </summary>
/// <param name="keyName">鍵名</param>
/// <param name="subKeyName">以分號(;)為分隔符的子項名稱</param>
/// <returns>對應子項名稱的值(即是=號後面的值)</returns>
public string GetSubValue(string keyName, string subKeyName)
{
string connectionString = AppConfigGet(keyName).ToLower();
string[] item = connectionString.Split(new char[] { ';' });

for (int i = 0; i < item.Length; i++)
{
string itemValue = item[i].ToLower();
if (itemValue.IndexOf(subKeyName.ToLower()) >= 0) //如果含有指定的關鍵字
{
int startIndex = item[i].IndexOf("="); //等號開始的位置
return item[i].Substring(startIndex + 1); //獲取等號後面的值即為Value
}
}
return string.Empty;
}

#region 一些常用的配置項屬性

/// <summary>
/// 從配置檔案獲取許可權系統連結(配置項HWSecurity的值)
/// </summary>
public string HWSecurity
{
get
{
return AppConfigGet("HWSecurity");
}
}

/// <summary>
/// 系統的標識ID(配置項System_ID的值)
/// </summary>
public string System_ID
{
get
{
return AppConfigGet("System_ID");
}
}

/// <summary>
/// 應用程式名稱(配置項ApplicationName的值)
/// </summary>
public string AppName
{
get
{
return AppConfigGet("ApplicationName");
}
}

/// <summary>
/// 軟體廠商名稱(配置項Manufacturer的值)
/// </summary>
public string Manufacturer
{
get
{
return AppConfigGet("Manufacturer");
}
}

/// <summary>
/// 設定程式的config檔案的Enterprise Library的資料庫連結地址
/// </summary>
/// <param name="filePath">Web.config或者*.exe.config檔案的絕對路徑</param>
/// <param name="keyName">鍵名</param>
/// <param name="keyValue">鍵值</param>
public void SetConnectionString(string keyName, string keyValue)
{
XmlDocument document = new XmlDocument();
document.Load(filePath);

XmlNodeList nodes = document.GetElementsByTagName("add");
for (int i = 0; i < nodes.Count; i++)
{
//獲得將當前元素的name屬性
XmlAttribute att = nodes[i].Attributes["name"];
//根據元素的第一個屬性來判斷當前的元素是不是目標元素
if (att != null && (att.Value == keyName))
{
att = nodes[i].Attributes["connectionString"];
if (att != null)
{
att.Value = keyValue;
break;
}
}
}
document.Save(filePath);
}

/// <summary>
/// 讀取程式的config檔案Enterprise Library的資料庫連結地址
/// </summary>
/// <param name="filePath">Web.config或者*.exe.config檔案的絕對路徑</param>
/// <param name="keyName">鍵名</param>
/// <returns></returns>
public string GetConnectionString(string keyName)
{
string strReturn = string.Empty;
try
{
XmlDocument document = new XmlDocument();
document.Load(filePath);

XmlNodeList nodes = document.GetElementsByTagName("add");
for (int i = 0; i < nodes.Count; i++)
{
//獲得將當前元素的key屬性
XmlAttribute att = nodes[i].Attributes["name"];
//根據元素的第一個屬性來判斷當前的元素是不是目標元素
if (att != null && (att.Value == keyName))
{
att = nodes[i].Attributes["connectionString"];
if (att != null)
{
strReturn = att.Value;
break;
}
}
}
}
catch
{ ; }

return strReturn;
}

/// <summary>
/// 獲取資料庫配置資訊
/// </summary>
/// <param name="keyName">節點名稱</param>
/// <returns></returns>
public DatabaseInfo GetDatabaseInfo(string keyName)
{
string connectionString = GetConnectionString(keyName);
return new DatabaseInfo(connectionString);
}

/// <summary>
/// 設定資料庫配置資訊
/// </summary>
/// <param name="keyName"></param>
/// <param name="databaseInfo"></param>
public void SetDatabaseInfo(string keyName, DatabaseInfo databaseInfo)
{
SetConnectionString(keyName, databaseInfo.ConnectionString);
}
#endregion
}