天下之事常成于困约,而败于奢靡。这篇文章主要讲述在C#winform app上运行时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
方法来保存配置中的更改。【在C#winform app上运行时CRUD ConnectionStrings】参考: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 = https://www.songbingjia.com/android/DateTime.Now.ToLongDateString() +" " + DateTime.Now.ToLongTimeString();
config.AppSettings.Settings.Add(newKey, newValue);
config.Save(ConfigurationSaveMode.Full);
推荐阅读
- 如何以编程方式从Android上的渐变中获取颜色列表
- React App无法正确呈现
- 如何在UL中迭代使用appendChild和片段LI()
- HTML5开发人员最常犯的5个错误(新手指南)
- Web开发人员最常犯的10个错误(开发人员教程)
- Polymer.js(Web应用程序开发的未来())
- Buggy Rails代码(Rails开发人员犯的10个最常见的错误)
- 野外使用Rails引擎指南(实际使用中的Rails引擎示例)
- JavaScript原型链,范围链和性能(你需要知道的)