Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#winform应用程序运行时的CRUD连接字符串_C#_Winforms_Connection String_Crud - Fatal编程技术网

C#winform应用程序运行时的CRUD连接字符串

C#winform应用程序运行时的CRUD连接字符串,c#,winforms,connection-string,crud,C#,Winforms,Connection String,Crud,我正在制作一个程序,我希望用户能够在使用它时动态地将它连接到多个数据库(SQL或MySQL)。因此,我需要能够创建读取更新和删除连接字符串(到app.config???),并使这些更改持久化 到目前为止,我能够做这些事情,但它们不是持久的 public static class CnnHelper { public static string ReadCnn(string name) { return ConfigurationManage

我正在制作一个程序,我希望用户能够在使用它时动态地将它连接到多个数据库(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());
      }
    }
公共静态类CnnHelper
{
公共静态字符串ReadCnn(字符串名称)
{
返回ConfigurationManager.ConnectionString[name].ConnectionString;
}
公共静态void UpdateCnn(字符串名称,字符串cnn)
{
ConfigurationManager.ConnectionString[name].ConnectionString=cnn;
}
公共静态void InsertCnn(字符串名称、字符串连接字符串)
{
仅适用于();
ConfigurationManager.connectionstring.Add(新的connectionstring设置(名称,connectionstring));
AddReadOnly();
}
公共静态列表getAllCnnames()
{
返回ConfigurationManager.ConnectionString
.Cast()
.选择(v=>v.Name)
.ToList();
}
私有静态void removeedOnly()
{
类型(配置元素集合)
.GetField(“bReadOnly”,BindingFlags.Instance | BindingFlags.NonPublic)
.SetValue(ConfigurationManager.ConnectionString,false);
//ConfigurationManager.ConnectionString.Add(新的ConnectionString设置());
}
私有静态void AddReadOnly()
{
类型(配置元素集合)
.GetField(“bReadOnly”,BindingFlags.Instance | BindingFlags.NonPublic)
.SetValue(ConfigurationManager.ConnectionString,true);
//ConfigurationManager.ConnectionString.Add(新的ConnectionString设置());
}
}
为什么它不保留更改


我怎么能做到

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

如果您仍然希望使用应用程序设置配置文件,则需要使用
Configuration.Save
方法保存配置中的更改

参考:


您通常只需要在连接字符串上连接到每个数据库,您可能需要CRUDSQL语句,这就是您的意思吗?你为什么要通过沉思来呼吸?是的。这花了我一段时间,但我明白了!这是正确的方法!多谢各位。我把它作为答案检查了一下,但我还不能认为它有用!
        // 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);