我有自定义配置部分,例如
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="DBConfiguration" type="NewSQLExecuter.DBConfigurationSection, NewSQLExecuter"/>
</configSections>
<DBConfiguration>
<Items>
<add servername="192.168.50.2\db1" dbname="test1" userid="sa" password="2222m@n" countrycode="GB" />
<add servername="192.168.60.2\db2" dbname="test2" userid="sa" password="22222n" countrycode="US" />
<add servername="192.168.70.2\db3" dbname="test3" userid="sa" password="3333" countrycode="DE" />
</Items>
</DBConfiguration>
</configuration>
我编写了一个从自定义配置部分读取数据的类...类代码如下。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
namespace NewSQLExecuter
{
public class DBConfigurationSection : ConfigurationSection
{
[ConfigurationProperty("Items")]
public ItemsCollection Items
{
get { return ((ItemsCollection)(base["Items"])); }
}
}
[ConfigurationCollection(typeof(ItemsElement))]
public class ItemsCollection : ConfigurationElementCollection
{
protected override ConfigurationElement CreateNewElement()
{
return new ItemsElement();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((ItemsElement)(element)).CountryCode;
}
public ItemsElement this[int idx]
{
get
{
return (ItemsElement)BaseGet(idx);
}
}
}
public class ItemsElement : ConfigurationElement
{
[ConfigurationProperty("servername", DefaultValue = "", IsKey = false, IsRequired = false)]
public string ServerName
{
get
{
return ((string)(base["servername"]));
}
set
{
base["servername"] = value;
}
}
[ConfigurationProperty("dbname", DefaultValue = "", IsKey = false, IsRequired = false)]
public string DBName
{
get
{
return ((string)(base["dbname"]));
}
set
{
base["dbname"] = value;
}
}
[ConfigurationProperty("userid", DefaultValue = "", IsKey = false, IsRequired = false)]
public string UserID
{
get
{
return ((string)(base["userid"]));
}
set
{
base["userid"] = value;
}
}
[ConfigurationProperty("password", DefaultValue = "", IsKey = false, IsRequired = false)]
public string Password
{
get
{
return ((string)(base["password"]));
}
set
{
base["password"] = value;
}
}
[ConfigurationProperty("countrycode", DefaultValue = "", IsKey = true, IsRequired = true)]
public string CountryCode
{
get
{
return ((string)(base["countrycode"]));
}
set
{
base["countrycode"] = value;
}
}
}
}
这样我迭代自定义配置数据并获取值
DBConfigurationSection section = (DBConfigurationSection)ConfigurationManager.GetSection("DBConfiguration");
if (section != null)
{
DateTime satrt = DateTime.Now;
for (int i = 0; i <= section.Items.Count - 1; i++)
{
var country = section.Items[i].CountryCode; ;
var constring = string.Format("{0}{1}{2}{3}", "UID=" + section.Items[i].UserID, ";PWD=" + section.Items[i].Password,
";Server=" + section.Items[i].ServerName, ";Database=" + section.Items[i].DBName);
dicList.Add(country, constring);
}
}
代码工作正常,但我想再添加一个功能,比如通过任何键值搜索任何配置数据,比如
if(section.key.userid=="joy")
{
string pwd=section.key.password
}
因此,请指导我如何将搜索功能添加到我的课程中。如果我可以使用 LINQ 搜索任何自定义配置数据,那就太好了。所以请指导我谢谢。
处理 app.config 文件中的两个自定义配置部分时出错
我的 app.config 文件看起来像
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="DBConfiguration" type="CSRAssistant.DBConfigurationSection, CSRAssistant"/>
<section name="LoginConfiguration" type="CSRAssistant.LoginConfigurationSection, CSRAssistant"/>
</configSections>
<DBConfiguration>
<add servername="dbname" dbname="BBAJobBoardForGB" userid="sa" password="222" countrycode="GBR" />
<add servername="db2" dbname="BBAJobBoardForUS" userid="sa" password="swww" countrycode="USA" />
</DBConfiguration>
<LoginConfiguration>
<add UserName="ww" Pwd="ww" Country="GBR"/>
<add UserName="ss" Pwd="ss" Country="USA"/>
<add UserName="dd" Pwd="dd" Country="CAD"/>
</LoginConfiguration>
<appSettings>
<add key="MailID" value="tridip@bba-reman.com" />
</appSettings>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
<requiredRuntime version="v4.0.20506"/>
</startup>
</configuration>
处理两个部分我的代码如下
namespace CSRAssistant
{
public class DBConfigurationSection : ConfigurationSection
{
//[ConfigurationProperty("Items")]
//public ItemsCollection Items
//{
// get { return ((ItemsCollection)(base["Items"])); }
//}
[ConfigurationProperty("", IsDefaultCollection = true)]
public ItemsCollection Items
{
get
{
return ((ItemsCollection)(base[""]));
}
}
}
[ConfigurationCollection(typeof(ItemsElement))]
public class ItemsCollection : ConfigurationElementCollection
{
protected override ConfigurationElement CreateNewElement()
{
return new ItemsElement();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((ItemsElement)(element)).CountryCode;
}
public ItemsElement this[int idx]
{
get
{
return (ItemsElement)BaseGet(idx);
}
}
}
public class ItemsElement : ConfigurationElement
{
[ConfigurationProperty("servername", DefaultValue = "", IsKey = false, IsRequired = false)]
public string ServerName
{
get
{
return ((string)(base["servername"]));
}
set
{
base["servername"] = value;
}
}
[ConfigurationProperty("dbname", DefaultValue = "", IsKey = false, IsRequired = false)]
public string DBName
{
get
{
return ((string)(base["dbname"]));
}
set
{
base["dbname"] = value;
}
}
[ConfigurationProperty("userid", DefaultValue = "", IsKey = false, IsRequired = false)]
public string UserID
{
get
{
return ((string)(base["userid"]));
}
set
{
base["userid"] = value;
}
}
[ConfigurationProperty("password", DefaultValue = "", IsKey = false, IsRequired = false)]
public string Password
{
get
{
return ((string)(base["password"]));
}
set
{
base["password"] = value;
}
}
[ConfigurationProperty("countrycode", DefaultValue = "", IsKey = true, IsRequired = true)]
public string CountryCode
{
get
{
return ((string)(base["countrycode"]));
}
set
{
base["countrycode"] = value;
}
}
}
public class LoginConfigurationSection : ConfigurationSection
{
//[ConfigurationProperty("Items")]
//public ItemsCollection Items
//{
// get { return ((ItemsCollection)(base["Items"])); }
//}
[ConfigurationProperty("", IsDefaultCollection = true)]
public ItemsCollection Items
{
get
{
return ((ItemsCollection)(base[""]));
}
}
}
public class LoginElement : ConfigurationElement
{
[ConfigurationProperty("UserName", DefaultValue = "", IsKey = false, IsRequired = false)]
public string UserName
{
get
{
return ((string)(base["UserName"]));
}
set
{
base["UserName"] = value;
}
}
[ConfigurationProperty("Pwd", DefaultValue = "", IsKey = false, IsRequired = false)]
public string Pwd
{
get
{
return ((string)(base["Pwd"]));
}
set
{
base["Pwd"] = value;
}
}
[ConfigurationProperty("Country", DefaultValue = "", IsKey = false, IsRequired = false)]
public string Country
{
get
{
return ((string)(base["Country"]));
}
set
{
base["Country"] = value;
}
}
}
}
像这样读取两个自定义配置设置
string joyPassword = "";
LoginConfigurationSection LoginConfigurationSection = (LoginConfigurationSection)ConfigurationManager.GetSection("LoginConfiguration");
if (LoginConfigurationSection != null)
{
var UserCredentials = LoginConfigurationSection.Items
.Cast<LoginElement>()
.FirstOrDefault(_element => _element.UserName == "razi");
if (UserCredentials != null)
joyPassword = UserCredentials.Country;
DBConfigurationSection section = (DBConfigurationSection)ConfigurationManager.GetSection("DBConfiguration");
if (section != null)
{
var DbConnection = section.Items
.Cast<ItemsElement>()
.FirstOrDefault(_element => _element.CountryCode.ToUpper() == joyPassword.ToUpper());
if (DbConnection != null)
joyPassword = DbConnection.ServerName;
}
}
现在我在运行时遇到错误 无法识别的属性“用户名”。请注意,属性名称区分大小写。
为什么无法识别的属性“用户名”只是不明白....如果可能,请指导我。谢谢