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

C# 创建一个静态字典对象,用数据库中的值填充,c#,.net,C#,.net,我希望dictionary对象包含从数据库生成的字符串键和值。但是,我只需要在页面加载时运行一次。C.NET 我用哪种方法可以做到?我尝试了以下方法: public static class GlobalVar { static Dictionary<string, string> GenerateLoginStatus(Dictionary<string, string> List) { string Query = "SELECT *

我希望dictionary对象包含从数据库生成的字符串键和值。但是,我只需要在页面加载时运行一次。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);

}
我在另一个页面中使用它:GlobalVar.LoginStatus[AlreadyLoggedIn]

AlreadyLoggedIn肯定是在数据库中创建的,但是当我调用任何键时,它返回一个异常,但不告诉是哪个异常


编辑:我对代码做了一些更改,现在它为“GlobalVar”的类型初始值设定项抛出了一个异常。

我想您可能会遇到空引用异常,这是因为您调用了静态初始化方法,并使用要初始化登录项的实例:

这会导致空引用异常。您应该使用类型构造函数并在那里创建字典:

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

这是ASP.NET还是WinForms或WPF?您知道它会引发异常,但它不会告诉您是哪个异常?您是否尝试过进入它或放置一些try-catch块?我非常怀疑该异常不可用,除非您自己吞下了该信息。当该异常不可用时,我打赌类型初始值设定项失败。您是否尝试调试静态构造函数?如果我没有记错,TypeInitializationException将有一个包含更多信息的非null InnerException。
public static Dictionary<string, string> 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
}