我尝试更改连接字符串,但它只是在内存中更改,但在App.Config文件中没有,下面是我正在使用的代码
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.ConnectionStrings.ConnectionStrings[1].ConnectionString = "metadata=res://*/TCSModel.csdl|res://*/TCSModel.ssdl|res://*/TCSModel.msl;provider=System.Data.SqlClient;provider connection string='Data Source=" + cmbServerName.Text + ";Initial Catalog=" + cmbDatabase.Text + ";User ID=" + txtUserName.Text.Trim() + ";Password=" + txtPassword.Password + ";Persist Security Info=True;MultipleActiveResultSets=True'";
config.ConnectionStrings.ConnectionStrings[1].Name = "TCSEntities";
config.ConnectionStrings.ConnectionStrings[1].ProviderName = "System.Data.EntityClient";
config.Save(ConfigurationSaveMode.Full, true);
ConfigurationManager.RefreshSection("connectionStrings");
上述代码中有什么缺失或错误?
答案 0 :(得分:3)
您是否在Visual Studio中运行应用程序?如果是这种情况,Visual Studio会在yourApp.vshost.exe.Config
目录中创建临时配置文件bin
。此文件由您的代码更新。当然,在下次启动时,它会被重新创建(再次从源代码目录中的app.config
复制),因此看起来像保存不起作用。
因此,这是一个“生产中”不会出现的问题。
答案 1 :(得分:0)
如果您可以发布app.config文件会很有帮助。输入中包含多少个连接字符串?此代码更改或设置列表中的第二个。
尝试这样看看会发生什么 - 清除列表并只用一个条目设置一个新的:
config.ConnectionStrings.ConnectionStrings.Clear();
config.ConnectionStrings.ConnectionStrings[0].ConnectionString = "metadata=res://*/TCSModel.csdl|res://*/TCSModel.ssdl|res://*/TCSModel.msl;provider=System.Data.SqlClient;provider connection string='Data Source=" + cmbServerName.Text + ";Initial Catalog=" + cmbDatabase.Text + ";User ID=" + txtUserName.Text.Trim() + ";Password=" + txtPassword.Password + ";Persist Security Info=True;MultipleActiveResultSets=True'";
config.ConnectionStrings.ConnectionStrings[0].Name = "TCSEntities";
config.ConnectionStrings.ConnectionStrings[0].ProviderName = "System.Data.EntityClient";
您也可以尝试使用SaveAs
来确保知道修改后的版本的输出位置。