2012-04-17 55 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」在數據庫中肯定被創建,但我當調用任何鍵,它會返回一個異常(不會告訴哪個異常)。

編輯:我改變了一下代碼,它現在給出了「GlobalVar的類型初始值設定項」引發了一個異常。「

+0

這是ASP.NET還是WinForms或WPF? – ericb 2012-04-17 20:14:21

+0

你知道它拋出一個異常,但它不告訴你哪一個?你有沒有嘗試加入或者嘗試一些try catch塊? – Xaisoft 2012-04-17 20:15:02

+1

我非常懷疑這個例外是不可用的,除非你自己吞下了這些信息。 – 2012-04-17 20:15:06

回答

0

我想你可能會得到它,因爲你打電話給你靜態初始化方法與您要初始化(LoginTypes)實例引起的空引用異常:

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

GenerateLoginStatus執行,LoginTypes爲空。但是,您嘗試添加項目:

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

這會導致空引用異常。您應該使用類型構造函數並在那裏創建該字典:

static GlobalVar() 
{ 
    LoginTypes = new Dictionary<string, string>(); 
    // proceed with initialization 
}