У меня есть приложение-служба Windows, с которым я хочу управлять настройкой для сайта asp.net. По мере увеличения моего приложения мой список настроек в файле app.config также вырос. Итак, я решил переместить эти настройки в таблицу в своем SQLDB, чтобы иметь возможность отслеживать их и давать мне способ изменить настройки с сайта администратора. У меня возникла проблема, когда я пытаюсь сохранить тип значения параметра в таблице, а затем использовать его, чтобы изменить значение свойства на сохраненный тип. Например, у меня довольно много определённых TimeSpan. В таблице SQL данные будут выглядеть следующим образом.Перемещение параметров app.config в db и использование типа значения для динамического задания возвращаемого типа данных
guid settingName settingValue settingType
936767f5-63b5-4844-9991-29f6f92c53f2 SMTimeStart 12:00:00 TimeSpan
Я пытаюсь использовать следующий код, чтобы вытащить настройки и вернуть их в правильном типе.
public class SettingDataValue
{
public Guid guid { get; set; }
public string SettingName { get; set; }
public string SettingValue { get; set; }
public string SettingType { get; set; }
}
public static dynamic getSettingFromDB(string name)
{
SettingDataValue s = new SettingDataValue();
using (IDbConnection _db = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString), commandTimeout = null)
{
s = _db.Query<SettingDataValue>("Select Guid, SettingName, SettingValue ,SettingType from SiteSettings where settingName = '" + name + "'").SingleOrDefault();
}
PropertyInfo propertyInfo = s.GetType().GetProperty(s.SettingType);
propertyInfo.SetValue(s, Convert.ChangeType(s.SettingValue, propertyInfo.PropertyType), null);
return s.SettingValue;
}
Однако, когда я запускаю это я получаю пустую ссылку исключение на
propertyInfo.SetValue(s, Convert.ChangeType(s.SettingValue, propertyInfo.PropertyType), null);
Я знаю, что запрос работает, когда я проверить его и посмотреть его с SQL Profiler. Любые мысли или предложения?
Отличное решение! Раньше я никогда этого не использовал. Если бы я только знал об этом, прежде чем я построил свое собственное решение, это спасло бы меня некоторое время. –