C#winform应用程序在运行时运行CRUD ConnectionStrings

时间:2018-06-26 12:40:58

标签: c# winforms connection-string crud

我正在制作一个程序,我希望用户能够在使用该程序时将其动态连接到多个数据库(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 :(得分:1)

我认为理想情况下,您应该保留一个用户配置文件来管理每个用户的数据库连接字符串,而不是让他们直接更改应用程序配置。

如果您仍然喜欢使用应用程序设置配置文件,则需要使用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);