写作&阅读App配置设置

时间:2013-02-28 18:35:21

标签: c#

我有一个应用程序需要检查数据库是否存在特定代码;如果它确实存在,那么必须加载该代码的相应值,否则返回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();

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

Plz帮助

3 个答案:

答案 0 :(得分:2)

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

if (config.AppSettings.Settings.ContainsKey(key) && 
    config.AppSettings.Settings[key] != null)
{
    return config.AppSettings.Settings[key].ToString();
}

答案 1 :(得分:1)

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

答案 2 :(得分:1)