创建一个静态字典对象,填充数据库中的值

时间:2012-04-17 20:12:05

标签: c# .net

我想让一个字典对象包含从数据库生成的字符串键和值。但是,我只需要在页面加载时运行一次。 (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'的类型初始化程序引发了异常。“

1 个答案:

答案 0 :(得分: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
}