1

データベースから生成された文字列キーと値を辞書オブジェクトに含めたいのですが。ただし、ページが読み込まれるときに1回だけ実行する必要があります。(C#.NET)

どのように私はそれを行うことができますか?私は次のことを試しました:

public static class GlobalVar
{
    static Dictionary<string, string> GenerateLoginStatus(Dictionary<string, string> List)
    {
        string Query = "SELECT * FROM LoginStatus";
        DataTable Types = MyAdoHelper.ExecuteDataTable(GlobalVar.dbName, Query);
        foreach (DataRow Row in Types.Rows)
        {
            List.Add(Row["Status_Title"].ToString(), Row["Status_Info"].ToString());
        }
        return List;
    }

    public const string GlobalString = "ProjectDatabase.mdf";

    public static Dictionary<string, string> LoginTypes = GenerateLoginStatus(LoginTypes);

}

テーブル構造:

Status_Title        Status_Info

AlreadyLoggedIn     User is already logged in.

A                   B

C                   D

そして、私はそれを別のページで使用します:GlobalVar.LoginStatus["AlreadyLoggedIn"]

「AlreadyLoggedIn」は確かにデータベースに作成されますが、いずれかのキーを呼び出すと、例外が返されます(どの例外かはわかりません)。

編集:コードを少し変更すると、「「GlobalVar」の型初期化子が例外をスローしました」というメッセージが表示されるようになりました。

4

1 に答える 1

0

初期化するインスタンスで静的初期化メソッドを呼び出すために発生するnull参照例外が発生する可能性があると思います(LoginTypes):

public static Dictionary<string, string> LoginTypes =
    GenerateLoginStatus(LoginTypes);

GenerateLoginStatus実行すると、はLoginTypesnullになります。しかし、あなたはそれにアイテムを追加しようとします:

static Dictionary<string, string> GenerateLoginStatus(
    Dictionary<string, string> List)
{
    // ...
    List.Add(Row["Status_Title"].ToString(), Row["Status_Info"].ToString());

これにより、null参照例外が発生します。型コンストラクターを使用して、そこでその辞書を作成する必要があります。

static GlobalVar()
{
    LoginTypes = new Dictionary<string, string>();
    // proceed with initialization
}
于 2012-04-17T20:27:33.860 に答える