我想让一个字典对象包含从数据库生成的字符串键和值。但是,我只需要在页面加载时运行一次。 (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 :(得分: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
}