是否可以通过编程方式更改App.config中connectionString内的用户/密码?

Ade*_*phx 0 c# wpf model-view-controller

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="connect_cbu" connectionString="Data Source=192.168.66.67; Initial Catalog=CBU; Persist Security Info=True; User ID=Admin;Password=1234"/>   
  </connectionStrings>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
</configuration>
Run Code Online (Sandbox Code Playgroud)

假设我定义了以下两个字符串:public static string user;and public static string pass;inside Global.cs.有可能以某种方式将它们包括在内connectionString吗?

例:

connectionString="Data Source=192.168.66.67; Initial Catalog=CBU; Persist Security Info=True; User ID='Global.user';Password='Global.pass'"/>
Run Code Online (Sandbox Code Playgroud)

解决方案,基于TheGeneral的答案:

的app.config

<connectionStrings>
<clear/>
<add name="connect_cbu" connectionString="Data Source=192.168.66.67; Initial Catalog=CBU; Persist Security Info=True" providerName="System.Data.SqlClient"/>
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)

MainWindow.xaml.cs

using System;
using System.Configuration;
using System.Data.SqlClient;
using System.Windows;


namespace Test
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            OpenConnection();
            InitializeComponent();
        }

        public SqlConnection con = new SqlConnection();

        public void OpenConnection()
        {
            try
            {
                con.ConnectionString = BuildConnectionString("Admin", "1234"); 
                con.Open();
            }
            catch (SqlException ex)
            {
                MessageBox.Show(ex.Message, "Warning", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
        {
            MessageBoxResult result = MessageBox.Show(this, "Do you want to exit?", "Warning", MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
            if (result != MessageBoxResult.Yes)
            {
                e.Cancel = true;
                con.Close();
            }
        }

        public static string BuildConnectionString(string userName, string userPassword)
        {
            ConnectionStringSettings settings = ConfigurationManager.ConnectionStrings["connect_cbu"];

            if (null != settings)
            {
                string connectString = settings.ConnectionString;
                Console.WriteLine("Original: {0}", connectString);
                SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString)
                {
                    UserID = userName,
                    Password = userPassword
                };
                Console.WriteLine("Modified: {0}", builder.ConnectionString);
                return builder.ToString();
            }
            else
            {
                MessageBox.Show("App.config is missing!", "Warning", MessageBoxButton.OK, MessageBoxImage.Error);
                return "fail";
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

AAA*_*ddd 6

某些连接字符串构建器可能对您有所帮助

如果事先知道连接字符串的某些元素,则可以将它们存储在配置文件中并在运行时检索以构造完整的连接字符串.例如,可能事先知道数据库的名称,但不知道服务器的名称.或者您可能希望用户在运行时提供名称和密码,而无法将其他值注入连接字符串.

例如

<connectionStrings>  
  <clear/>  
  <add name="partialConnectString"   
    connectionString="Initial Catalog=Northwind;"  
    providerName="System.Data.SqlClient" />  
</connectionStrings>  
Run Code Online (Sandbox Code Playgroud)

private static void BuildConnectionString(string dataSource,
    string userName, string userPassword)
{
    // Retrieve the partial connection string named databaseConnection
    // from the application's app.config or web.config file.
    ConnectionStringSettings settings =
        ConfigurationManager.ConnectionStrings["partialConnectString"];

    if (null != settings)
    {
        // Retrieve the partial connection string.
        string connectString = settings.ConnectionString;
        Console.WriteLine("Original: {0}", connectString);

        // Create a new SqlConnectionStringBuilder based on the
        // partial connection string retrieved from the config file.
        SqlConnectionStringBuilder builder =
            new SqlConnectionStringBuilder(connectString);

        // Supply the additional values.
        builder.DataSource = dataSource;
        builder.UserID = userName;
        builder.Password = userPassword;
        Console.WriteLine("Modified: {0}", builder.ConnectionString);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是如何初始化BuildConnectionString呢?

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(youCurrrentConnectionString);

builder.UserID = userName;
builder.Password = userPassword;


//usage 
ConnectionString = builder.ConnectionString;
Run Code Online (Sandbox Code Playgroud)