【问题标题】:Is it possible (and how) to add ConnectionString to app.config at runtime in C#?是否可以(以及如何)在 C# 运行时将 ConnectionString 添加到 app.config?
【发布时间】:2010-12-22 10:24:38
【问题描述】:

我有一个控制台应用程序,它获取连接字符串作为参数。我必须在 app.config 中设置一个名为“ConnectionString”的 ConnectionString,并将给定的参数设置为 sql 连接字符串。

谢谢回答。在链接的帮助下,我得到了这个:

变量配置 = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); var 连接字符串设置 = 新的连接字符串设置(“连接字符串”, _arguments["connectionString"], "System.Data.SqlClient"); config.ConnectionStrings.ConnectionStrings.Add(connectionStringSettings); config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("connectionStrings");

【问题讨论】:

    标签: c# connection-string app-config


    【解决方案1】:

    是的,您绝对可以在运行时在 app.config 中添加/修改/删除设置。我通常是这样做的。

    using System.Configuration; // don't forget to add the system.configuration dll to your references.
    
        public static void CreateConnectionString(string datasource, string initialCatalog, string userId, string password)
        {
            try
            {
                //Integrated security will be off if either UserID or Password is supplied
                var integratedSecurity = string.IsNullOrEmpty(userId) || string.IsNullOrEmpty(password);
    
                //Create the connection string using the connection builder
                var connectionBuilder = new SqlConnectionStringBuilder
                {
                    DataSource = datasource,
                    InitialCatalog = initialCatalog,
                    UserID = userId,
                    Password = password,
                    IntegratedSecurity = integratedSecurity
                };
    
                //Open the app.config for modification
                var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                //Retreive connection string setting
                var connectionString = config.ConnectionStrings.ConnectionStrings["ConnectionStringName"];
                if (connectionString == null)
                {
                    //Create connection string if it doesn't exist
                    config.ConnectionStrings.ConnectionStrings.Add(new ConnectionStringSettings
                    {
                        Name = ConnectionName,
                        ConnectionString = connectionBuilder.ConnectionString,
                        ProviderName = "System.Data.SqlClient" //Depends on the provider, this is for SQL Server
                    });
                }
                else
                {
                    //Only modify the connection string if it does exist
                    connectionString.ConnectionString = connectionBuilder.ConnectionString;
                }
    
                //Save changes in the app.config
                config.Save(ConfigurationSaveMode.Modified);
            }
            catch (Exception)
            {
                //TODO: Handle exception
            }
    }
    

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      忽略这个答案,看下面....

      是的 - 看看this

      这个方法大概就是你所追求的

      System.Configuration.ConfigurationManager.ConnectionStrings.Add(new ConnectionStringSettings("new name", "new string");
      

      【讨论】:

      • -1,这将导致System.Configuration.ConfigurationErrorsException : The configuration is read only.
      • 当它显然不起作用时,这怎么可能是公认的答案!有什么技巧可以让这个 not 抛出异常吗?现在从我那里得到-1
      • 这一行代码就OK了。它之前和之后的代码都不见了:-)打开并保存????
      • 甚至缺少右括号。
      • 我不能删除这个答案,因为它被标记为已接受。支持 cubski 并编辑答案以反映
      猜你喜欢
      • 2015-09-21
      • 2017-06-17
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      相关资源
      最近更新 更多