C#WinForms正在以其他形式更改数据库名称

本文关键字:数据库 其他 C#WinForms | 更新日期: 2023-09-27 18:25:35

这是我的第一个问题,也是我的第一次C#程序:

我需要一个可以永久更改连接字符串的函数。

我的程序具有以下结构:主表单是Form1,当我单击按钮Options时,我从-Form3获得新表单,用户可以在其中登录(密码保护更改选项),如果登录成功,我将创建新表单-Form4。在Form4的构造函数中,我从Form1传递一个SqlConnection对象。我想通过点击按钮更改我的数据库名称,所以这里是代码:

var config = ConfigurationManager
.OpenExeConfiguration(ConfigurationUserLevel.None);
var connectionStringsSection = (ConnectionStringsSection)config
.GetSection("connectionStrings");
var x = connectionStringsSection
.ConnectionStrings["App.Properties.Settings.ppsConnectionString"]
.ConnectionString;
String[] words = x.Split(';');
words[1] = "Initial Catalog="+textBoxDB.Text;
x=String.Join(";", words);
connectionStringsSection
.ConnectionStrings["App.Properties.Settings.ppsConnectionString"]
.ConnectionString = x;
//above, this variable x in debug mode looks right
//I read this line below should update file, so change would be permamently
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("connectionStrings");

但它不会改变任何东西,我也不知道如何更改这个设置文件,这样用户就可以更改数据库名称,当他们重新启动应用程序时,他们应该有这个新的更改后的连接字符串。

编辑:

感谢您的回复,事实证明我应该从bin/Release.exe版本运行此代码,而不是在VS中的Debug下运行,它实际上会更改此配置文件。

C#WinForms正在以其他形式更改数据库名称

如果您使用的是Visual Studio,那么您可以使用项目的"属性"窗体在可执行文件中设置一系列设置,并且可以在不进行反射的情况下访问这些设置。这些属性可以设置为"应用程序级别"或"用户级别",从而确定任何更改的范围。

YourProjectName.Properties.Settings.Default.YourSettingName="设置";

如果你知道要存储多少ConnectionStrings和其他变量,如果你需要设置未知数量的连接字符串,那么我个人会为每个设置使用一个带行的DataTable,它可以保存到应用程序目录中的XML文件中,也可以按用户保存。

将配置数据存储在一个单例配置对象中,并使用其中的连接字符串。在启动过程中使用app.config中的连接字符串初始化singleton对象,并在稍后对其进行更改。