2012-04-17 2 views
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」確かにデータベースに作成されますが、私ときいずれかのキーを呼び出すと、例外を返します(どの例外を通知しないか)。

EDIT:コードを少し変更しました。これで、「 'GlobalVar'の型初期化子が例外をスローしました。

+0

このASP.NETまたはWinFormsまたはWPFですか? – ericb

+0

あなたは例外をスローすることは知っていますが、どちらのことを教えてくれませんか?あなたはそれに踏み込んだり、ブロックをキャッチしようとしましたか? – Xaisoft

+1

あなたが情報を自分で飲み込んだ場合を除き、私は例外が利用できないことを非常に疑っています。 –

答えて

0

は、私はあなたがあなたが(LoginTypes)を初期化したいインスタンスを使用して、静的な初期化メソッドを呼び出すために起因するnull参照の例外を取得する可能性があるとします

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

GenerateLoginStatus実行は、LoginTypesがnullの場合は。ただし、項目を追加しようとしました。

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 
} 
関連する問題