首页 > 解决方案 > C# winform 应用程序运行时的 CRUD ConnectionStrings

问题描述

我正在制作一个程序,我希望用户能够在他/她使用它时动态地将它连接到多个数据库(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());
      }
    }

为什么它不保留更改?

我怎么能这样做?

标签: c#winformsconnection-stringcrud

解决方案


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

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

推荐阅读