1

我有一个应用程序需要检查数据库是否存在特定代码;如果确实存在,则必须加载该代码的相应值,否则返回 null。

我不想为每个代码(运行大约 200.000 个代码)访问数据库。

所以我得到了这个小应用程序来测试 app.conf

public static void setAppSetting(string key, string value)
{
   Configuration config =  ConfigurationManager.OpenExeConfiguration(System.Reflection.Assembly.GetExecutingAssembly().Location);

   if (config.AppSettings.Settings != null)
   {            
      config.AppSettings.Settings.Remove(key);
   }

   config.AppSettings.Settings.Add(key, value);
   config.Save(ConfigurationSaveMode.Modified);
 }

public static string getAppSetting(string key)
{
   try
   {
      Configuration config = ConfigurationManager.OpenExeConfiguration(System.Reflection.Assembly.GetExecutingAssembly().Location);
      return config.AppSettings.Settings[key].ToString();
   }

   catch (Exception ex)
   {
      throw ex;
   }
}

private static void loadKeysValues()
{
   using (SqlConnection Gcon = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["constr"].ConnectionString))
   {
      //Open Connection
      Gcon.Open();
      using (SqlCommand sqlCmd = new SqlCommand("SELECT key,value FROM tables", Gcon))
      {
         using (SqlDataReader reader = sqlCmd.ExecuteReader())
         {
            if (reader.HasRows)
            {
               while (reader.Read())
               {
                  System.Console.WriteLine(reader.GetString(0) + " , " + reader.GetString(1));
                  setAppSetting(reader.GetString(0), reader.GetString(1));
               }
            }
         } // End of SqlDataReader

      } // end of SqlCommand
    }
  }

static void Main(string[] args)
{
   System.Console.WriteLine("Loading.........");
   loadKeysValues();
   System.Console.WriteLine("Completed");
   System.Console.WriteLine("Input a key to get its value");
   var input = System.Console.Read().ToString();
   System.Console.WriteLine(getAppSetting(input));
   System.Console.ReadLine();
}

但是我在这一行遇到了 getAppSetting() 错误:

return config.AppSettings.Settings[key].ToString();

错误:对象引用未设置为对象的实例。

请帮忙

4

3 回答 3

2

确保该值不为空。尝试这个:

if (config.AppSettings.Settings.ContainsKey(key) && 
    config.AppSettings.Settings[key] != null)
{
    return config.AppSettings.Settings[key].ToString();
}
于 2013-02-28T19:08:10.377 回答
1

您很可能正在尝试访问不存在的设置。您可以在 catch 块中处理该异常并在这种情况下返回 null。

于 2013-02-28T18:41:03.090 回答
1

ToString() 方法不返回值,尝试使用 Value 属性:

return config.AppSettings.Settings[key].Value;
于 2014-03-14T14:54:42.323 回答