Jmocke
Jmocke

Reputation: 271

Write & Read App Config Setting

I have an application that need to check to the database if a particular code exists; if it does exist, then have to load the corresponding value of that code else return null.

I don't want to hit the database for each code(running about 200.000 codes ).

so i got this small app to test the 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();
}

But I got an error with the getAppSetting() at this line:

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

Error: Object reference not set to an instance of an object.

Plz help

Upvotes: 1

Views: 954

Answers (3)

matuuar
matuuar

Reputation: 399

ToString() method don´t return the value, try with Value property:

return config.AppSettings.Settings[key].Value;

Upvotes: 1

user761665
user761665

Reputation:

Make sure that the value isn't null. Try this:

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

Upvotes: 2

Mike Darmetko
Mike Darmetko

Reputation: 151

Most likely you're trying to access a setting that doesn't exist. You could handle that exception in your catch block and return null in that case.

Upvotes: 1

Related Questions