【问题标题】:Change ConnectionString in run-time in App.config not saved until rebuild a program在 App.config 的运行时更改 ConnectionString 直到重建程序才保存
【发布时间】:2018-11-13 06:25:25
【问题描述】:

我正在使用用 C# 创建的 WinForm 表单连接到 Sql 服务器数据库。

要连接到数据库,用户必须提供登录名和密码。

我使用配置文件 App.config 来存储 connectionString 如下:

 <ConnectionStrings>
         <Add name = "K1" connectionString = "Data Source = HP; Initial Catalog = TRVANALYT; User ID = {0}; Password = {1}
       ProviderName = "System.Data.SqlClient" />
 </ ConnectionStrings>  

向我提出的问题没有保存新的connectionString
要刷新 connextionString K1 我必须重建程序,它会给出正确的结果 如果您有建议 最佳做法是什么? 非常感谢

我的代码:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
string connexionstring = ConfigurationManager.ConnectionStrings["K1"].ToString();
var connectionStringsSection = (ConnectionStringsSection) config.GetSection("connectionStrings");
string NewConnexionstring = string.Format(connexionstring, txtUser.Text, txtPwd.Text);
connectionStringsSection.ConnectionStrings["K1"].ConnectionString = NewConnexionstring; //Set new connectionString with user and password
connectionStringsSection.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Full);
ConfigurationManager.RefreshSection("connectionStrings");

App.config

<configSections>
</configSections>
<connectionStrings>
    <add name="K1" connectionString="Data Source=HP;Initial Catalog=TRVANALYT;User ID={0};Password={1}" providerName="System.Data.SqlClient" />
</connectionStrings>

【问题讨论】:

  • 您在哪个路径中编辑您的 app.config 文件?该文件被复制到 bin 文件夹并在构建期间重命名为 YourApp.exe.config,并且应用程序实际上从那里读取它 - 因此,如果您在那里进行编辑,则不必重新构建。
  • 为什么我必须知道路径?我执行程序的要点,我想更改新用户的 app.config 和他的 sql server 密码以及我如何继续按照您的要求进行操作?
  • 我问的原因是你说你必须重建程序才能应用更改。构建时,该文件被复制到 bin 目录,这是程序运行时读取的位置。如果您在源目录中编辑文件,程序将不会看到更改,直到它被重建并且我再次复制到 bin 文件夹中的文件。

标签: c# app-config


【解决方案1】:

我也有同样的问题,但是在调试的时候发现ConnectionString被保存了,但是当我新建一个对象的时候,this的ConnectionString是假的。 我通过这种方式解决了这个问题:

  • 在 Entity.Context.cs 文件(在我的例子中是 QuanLySieuThi.Context.cs)中,您将看到一个部分类。您应该在此类中添加一个带有 Connectionstring 参数的新构造函数:

代码

 public partial class QuanLySieuThiEntities : DbContext
 {
     //This is the default constructor
     public QuanLySieuThiEntities()
         : base("name=QuanLySieuThiEntities")
     {
     }
     //Add this constructor
     public QuanLySieuThiEntities(String connString)
         : base(connString)
     {
     }
 }
  • 最后,当你初始化一个新对象时,你应该使用带有你需要的连接字符串的新构造函数:

代码

  string _conString = System.Configuration.ConfigurationManager.ConnectionStrings["QuanLySieuThiEntities"].ConnectionString;
  QuanLySieuThiEntities newObject = new QuanLySieuThiEntities(_conString);

【讨论】:

    猜你喜欢
    • 2015-08-28
    • 1970-01-01
    • 2011-01-01
    • 2010-12-05
    • 2010-09-30
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 2011-09-14
    相关资源
    最近更新 更多