2012-04-17 62 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 
}