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

我想您可能会得到空引用异常,这是因为您使用要初始化的实例调用静态初始化方法(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
}
于 2012-04-17T20:27:33.860 回答