c# - 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());
}
}
为什么它不保留更改?
我怎么能这样做?
解决方案
我认为理想情况下,您应该保留一个用户配置文件来管理每个用户的数据库连接字符串,而不是让他们直接更改应用程序配置。
如果您仍然喜欢使用应用程序设置配置文件,那么您需要使用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);
推荐阅读
- azure - 如何将 VSTS(又名 Azure DevOps)帐户绑定到 Azure 订阅
- javascript - React:在工作时更改按钮文本
- clojure - 使用“wrap-reload”时如何避免clojure中的全局状态?
- ios - 没有这样的模块'SwiftDate'
- javascript - 使用 JQuery 在单选按钮中设置“已检查”不起作用
- blockchain - 如何获取合约创建者的地址
- javascript - 如何使我的对象方法全局可访问
- django - 如何在 Django 模型中使用两个唯一约束?
- r - CRAN 可接受的方式链接到 OpenMP 一些从 Rcpp 调用的 C 代码
- javascript - Reactjs:使用 .blur() 使按钮元素失焦