2

次のようなカスタム構成セクションがあります

<?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);
    }
}

コードは正常に動作しますが、次のような任意のキー値で構成データを検索するなどの機能をもう 1 つ追加したいと思います

if(section.key.userid=="joy")
{
    string pwd=section.key.password
}

クラスに検索機能を追加する方法を教えてください。LINQ を使用してカスタム構成データを検索できればいいのですが。ありがとうございます。

app.config ファイルの 2 つのカスタム構成セクションを処理する際にエラーが発生する

私の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>

2つのセクションを処理するには、私のコードは次のようになります

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;
            }
        }

    }
}

このように2つのカスタム構成設定を読み取ります

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;
                }
            }

今、実行時に認識されない属性 'UserName' のようなエラーが発生しています 。属性名は大文字と小文字が区別されることに注意してください。

認識されない属性「UserName」が理解できない理由....可能であれば、私を案内してください。ありがとう

4

2 に答える 2

3

おそらく次のようなことができます:

var joyUserElement = section.Items
    .Cast<ItemsElement>()
    .FirstOrDefault(_element => _element.UserID == "joy");

if (joyUserElement != null)
    string joyPassword = joyUserElement.Password;

これはあなたにとって意味がありますか?これはテストされていないため、ここで何かが欠けている可能性がありますが、正常に動作するはずです。

forそこの代わりに通常のものを使用しているようですforeach。コレクションはであることに注意してください。したがって、次のように明示的な型付けでIEnumerablea を使用できます。foreach

foreach(ItemElement element in section.Items)

これにさらに2つのポイントを追加したいと思います:

  • 要素クラスの名前を変更して、実際の内容を反映することをお勧めします。たとえばDbConfigurationElementItemElement. これにより、長期的にはコードがもう少し明確になります。

  • <Items>特別な意味がない場合は、xml 内のタグを「非表示」にすることができます(そのように思われます)。このようにコレクションプロパティに注釈を付ける場合

.

[ConfigurationProperty("", IsDefaultCollection = true)]
public ItemsCollection Items
{
    get { return ((ItemsCollection)(base[""])); }
}

次に、セクションを次のように記述できます。

<DBConfiguration>
    <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" />
</DBConfiguration>

これは、あなたのような小さな単一コレクションの構成セクションに非常に役立ちます。

于 2014-02-05T14:04:31.807 に答える
0

こんにちは、あなたはそれを行うことができます。

    <?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="192.168.88.2\bbareman" dbname="BBAJobBoardForGB" userid="sa" password="8B@R5m@n" countrycode="GBR" />
        <add servername="192.168.1.2\bbareman" dbname="BBAJobBoardForUS" userid="sa" password="8B@R5m@n" countrycode="USA" />
        <add servername="192.168.2.2\bbareman" dbname="BBAJobBoardForDE" userid="sa" password="8B@R5m@n" countrycode="DEU" />
        <add servername="192.168.77.10\bbareman" dbname="BBAJobBoardForFR" userid="sa" password="8B@R5m@n" countrycode="FRA" />
        <add servername="192.168.3.2\bbareman" dbname="BBAJobBoardForIT" userid="sa" password="8B@R5m@n" countrycode="ITA" />
        <add servername="192.168.4.2\bbareman" dbname="BBAJobBoardForCA" userid="sa" password="8B@R5m@n" countrycode="CAD" />
        <add servername="192.168.55.10\bbareman" dbname="BBAJobBoardForES" userid="sa" password="8B@R5m@n" countrycode="ESP" />
      </DBConfiguration>

      <LoginConfiguration>
        <add ID="1" UserName="suanguite" Pwd="gguite" Country="GBR"/>
        <add ID="2" UserName="sujoy" Pwd="sujoyUS"  Country="USA"/>
        <add ID="3" UserName="sujoy" Pwd="sujoyCA"  Country="CAD"/>
        <add ID="4" UserName="pjasu" Pwd="pjasuDE"  Country="DEU"/>
        <add ID="5" UserName="kankana" Pwd="kankana123"  Country="ITA"/>
        <add ID="6" UserName="test" Pwd="test"  Country="IND"/>
        <add ID="7" UserName="biswajit" Pwd="biswajitES"  Country="ESP"/>
        <add ID="8" UserName="suparna" Pwd="suparna"  Country="CAD"/>
        <add ID="9" UserName="razi" Pwd="raziFR"  Country="FRA"/>
        <add ID="10" UserName="tridip" Pwd="tridip"  Country="GBR"/>
        <add ID="11" UserName="tridip" Pwd="tridip"  Country="ESP"/>
        <add ID="12" UserName="tridip" Pwd="tridip"  Country="FRA"/>
      </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>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.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;
            }
        }
    }


}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

namespace CSRAssistant
{
    //****login config

    public class LoginConfigurationSection : ConfigurationSection
    {
        //[ConfigurationProperty("Items")]
        //public ItemsCollection Items
        //{
        //    get { return ((ItemsCollection)(base["Items"])); }
        //}

        [ConfigurationProperty("", IsDefaultCollection = true)]
        public LoginCollection Items
        {
            get
            {
                return ((LoginCollection)(base[""]));
            }
        }
    }

    [ConfigurationCollection(typeof(LoginElement))]
    public class LoginCollection : ConfigurationElementCollection
    {
        protected override ConfigurationElement CreateNewElement()
        {
            return new LoginElement();
        }

        protected override object GetElementKey(ConfigurationElement element)
        {
            return ((LoginElement)(element)).ID;
        }

        public LoginElement this[int idx]
        {
            get
            {
                return (LoginElement)BaseGet(idx);
            }
        }
    }
    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;
            }
        }

        [ConfigurationProperty("ID", DefaultValue = "", IsKey = false, IsRequired = false)]
        public string ID
        {
            get
            {
                return ((string)(base["ID"]));
            }
            set
            {
                base["ID"] = value;
            }
        }
    }
}

呼び方

private void button1_Click_1(object sender, EventArgs e)
        {
            string _country = "";
            string _ServerName = "";
            LoginConfigurationSection LoginConfigurationSection = (LoginConfigurationSection)ConfigurationManager.GetSection("LoginConfiguration");
            if (LoginConfigurationSection != null)
            {
                var UserCredentials = LoginConfigurationSection.Items
                                    .Cast<LoginElement>()
                                    .FirstOrDefault(_element => _element.UserName == "razi");

                if (UserCredentials != null)
                    _country = UserCredentials.Country;



                DBConfigurationSection section = (DBConfigurationSection)ConfigurationManager.GetSection("DBConfiguration");
                if (section != null)
                {
                    var DbConnection = section.Items
                                        .Cast<ItemsElement>()
                                        .FirstOrDefault(_element => _element.CountryCode.ToUpper() == _country.ToUpper());

                    if (DbConnection != null)
                        _ServerName = DbConnection.ServerName;
                }
            }
        }
于 2014-02-05T19:52:25.600 に答える