首页 > 解决方案 > 如何在 app.confg 中的 connectionString 中使用变量?

问题描述

我想在我的app.confg.

<configuration>
    <appSetting>
        <add key="user" value="root"/>
        <add key="pass" value="root"/>
    </appSetting>
    <connectionStrings>
        <add name="mysql" 
             connectionString="datasource=localhost; port=3306; username={user}; password={pass};" 
             providerName="MySql.Data.MySqlClient"/>
    </connectionStrings>
</configuration>

当我得到使用的价值mysql

ConfigurationManager.ConnectionStrings["mysql"].ConnectionString

它返回

datasource=localhost; port=3306; username={user}; password={pass};

我的目标是让这个返回:

datasource=localhost; port=3306; username=root; password=root;

提前致谢

标签: c#

解决方案


您可以将连接字符串更改为:

<add name="mysql" 
         connectionString="datasource=localhost; port=3306; username={0}; password={1};" 
         providerName="MySql.Data.MySqlClient"/>

然后在您的 C# 代码中,您可以使用string.Format方法来替换值:

string.Format(ConfigurationManager.ConnectionStrings["mysql"].ConnectionString, "root", "root");

不建议使用这种解决方案,您应该将所有连接字符串保留在配置文件中。如果您有多个用于不同操作或用户的连接字符串。您应该在配置文件中创建多个连接字符串。每个连接都有不同的名称,您将通过它的名称来调用连接。在你的 CS 代码中保留用户名和密码是非常非常非常糟糕的。

在这种情况下,您的配置文件将如下所示:

    <configuration>
        <appSetting>
            <add key="user" value="root"/>
            <add key="pass" value="root"/>
        </appSetting>
        <connectionStrings>
            <add name="admin" 
                 connectionString="datasource=localhost; port=3306; username=adimn; password=aVeryBigComplexPassword;" 
                 providerName="MySql.Data.MySqlClient"/>
            <add name="user" 
                 connectionString="datasource=localhost; port=3306; username=OnlyReader; password=otherVeryBigComplexPassword;" 
                 providerName="MySql.Data.MySqlClient"/>
        </connectionStrings>
    </configuration>

然后在您的代码中,您可以像这样轻松获取连接字符串:

var conn = ConfigurationManager.ConnectionStrings["admin"].ConnectionString;

或者

var conn = ConfigurationManager.ConnectionStrings["user"].ConnectionString;

推荐阅读