CRUD ConnectionStrings во время выполнения в приложении C # winform - PullRequest
0 голосов
/ 26 июня 2018

Я делаю программу и хочу, чтобы пользователь мог динамически подключать ее к нескольким базам данных (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());
      }
    }

Почему не сохраняются изменения?

Как я могу это сделать?

1 Ответ

0 голосов
/ 26 июня 2018

Я думаю, что в идеале вы должны сохранить профиль пользователя для управления строками подключения к базе данных для каждого пользователя, а не позволять им напрямую изменять конфигурацию приложения.

Если вы по-прежнему предпочитаете использовать файл конфигурации параметров приложения, вам необходимо использовать метод Configuration.Save, чтобы сохранить изменения в конфигурации.

См .: https://docs.microsoft.com/en-us/dotnet/api/system.configuration.configuration.save?view=netframework-4.7.1

        // 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);
...