是否可以(以及如何)在 C# 运行时将 ConnectionString 添加到 app.config?

Posted

技术标签:

【中文标题】是否可以(以及如何)在 C# 运行时将 ConnectionString 添加到 app.config?【英文标题】:Is it possible (and how) to add ConnectionString to app.config at runtime in C#? 【发布时间】: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");

【问题讨论】:

【参考方案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 并编辑答案以反映

以上是关于是否可以(以及如何)在 C# 运行时将 ConnectionString 添加到 app.config?的主要内容,如果未能解决你的问题,请参考以下文章

如何在实例化时将值插入 C# 字典?

如何在运行时将编译的 svelte-components/-apps 导入 svelte-app

如何在构建时将其他文件包含到 C# 的输出目录中?

是否可以在运行时将命名空间动态更改为 ServiceContract?

C# 在运行时将 Enumerable.Iterator 强制转换为已知 List<Object>

是否可以将文件保存到确切的特定位置? (Windows 8.1 通用应用程序 C#)