Я создаю программу и хочу, чтобы пользователь мог динамически подключать ее к нескольким базам данных (SQL или MySQL) по мере их использования. Поэтому мне нужно иметь возможность создавать строки подключения для чтения, обновления и удаления (в app.config ???) и делать эти изменения постоянными.
До сих пор я могу делать большинство из этих вещей, но они непостоянны. Вот часть моего кода.
public static class CnnHelper
{
public static string ReadCnn(string name)
{
return ConfigurationManager.ConnectionStrings[name].ConnectionString;
}
public static void UpdateCnn(string name,string cnn)
{
ConfigurationManager.ConnectionStrings[name].ConnectionString = cnn;
}
public static void InsertCnn(string name, string connectionstring)
{
RemoveReadOnly();
ConfigurationManager.ConnectionStrings.Add(new ConnectionStringSettings(name, connectionstring));
AddReadOnly();
}
public static List<string> GetAllCnnNames()
{
return ConfigurationManager.ConnectionStrings
.Cast<ConnectionStringSettings>()
.Select(v => v.Name)
.ToList();
}
private static void RemoveReadOnly()
{
typeof(ConfigurationElementCollection)
.GetField("bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic)
.SetValue(ConfigurationManager.ConnectionStrings, false);
//ConfigurationManager.ConnectionStrings.Add(new ConnectionStringSettings());
}
private static void AddReadOnly()
{
typeof(ConfigurationElementCollection)
.GetField("bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic)
.SetValue(ConfigurationManager.ConnectionStrings, true);
//ConfigurationManager.ConnectionStrings.Add(new ConnectionStringSettings());
}
}
Почему не сохраняет изменения?
Как я могу это сделать?





Я думаю, что в идеале вы должны сохранить профиль пользователя для управления строками подключения к базе данных для каждого пользователя, вместо того, чтобы позволять им напрямую изменять конфигурацию приложения.
Если вы по-прежнему предпочитаете использовать файл конфигурации настроек приложения, вам необходимо использовать метод Configuration.Save, чтобы сохранить изменения в конфигурации.
// Add an entry to appSettings section.
int appStgCnt =
ConfigurationManager.AppSettings.Count;
string newKey = "NewKey" + appStgCnt.ToString();
string newValue = DateTime.Now.ToLongDateString() +
" " + DateTime.Now.ToLongTimeString();
config.AppSettings.Settings.Add(newKey, newValue);
config.Save(ConfigurationSaveMode.Full);
Ага. Мне потребовалось время, но я понял это! Это правильный способ сделать это! Большое тебе спасибо. Я проверил это как ответ, но пока не могу отметить его как полезный!
Обычно вам нужна только строка подключения для подключения к каждой базе данных, вам могут потребоваться операторы CRUD sql, это то, что вы имели в виду? Почему вы устанавливаете bReadOnly через отражение?