使连接字符串易于修改

时间:2012-12-02 18:02:40

标签: asp.net connection-string

我不知道我是否因为正确的谷歌搜索而变得太愚蠢但我没有找到解决方案:

我有一个带有ado.net Framework的asp.net应用程序,因此有一个连接字符串。

我的连接字符串存储在Web.config中,如下所示:

  <connectionStrings>
<add name="Entities" connectionString="metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=x.x.x.x;User Id=user;password=1234;database=db;port=8888;Persist Security Info=True&quot;" providerName="System.Data.EntityClient"/>
</connectionStrings>

我必须向某些人提供解决方案,如果他们不得不深入研究这个连接字符串并更改那里的所有设置(它只是没有“清晰排列”),我觉得有点烦人,它会如果我可以在字符串之外声明它们,可能是这样的(在同一个文件中,或者如果可能的话也在另一个名为“dbsettings”的文件中,并在web.config中包含此文件):

<appSettings>
 <add key="dbserver" value="x.x.x.x" />
 <add key="dbserverport" value="8888" />
 <add key="dbuser" value="user" />
 <add key="dbpassword" value="1234" />
</appSettings>

我希望你得到我正在谈论的内容。


解决方案

首先查看ChiYoung的答案 - 他几乎说了一切,但无论如何这里详细说明了我是怎么做到的:

Web.config我添加了此内容(在configuration部分内):

<appSettings>
 <add key="dbserver" value="x.x.x.x" />
 <add key="dbserverport" value="8888" />
 <add key="dbname" value="dbxy" />
 <add key="dbuser" value="user" />
 <add key="dbpassword" value="1234" />
</appSettings>

然后我在DatabaseHelper.cs - 图层(项目)中创建了一个类Data,如下所示:

class DatabaseHelper
{
    public static string MakeConnectionString()
    {
        string appDbserver = ConfigurationManager.AppSettings["dbserver"];
        string appDbserverport = ConfigurationManager.AppSettings["dbserverport"];
        string appDbuser = ConfigurationManager.AppSettings["dbuser"];
        string appDbpassword = ConfigurationManager.AppSettings["dbpassword"];
        string appDbname = ConfigurationManager.AppSettings["dbname"];

        return @"metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=MySql.Data.MySqlClient;provider connection string=""server=" + appDbserver + @";User Id=" +
               appDbuser + @";password=" + appDbpassword + @";database="+appDbname+@";port=" + appDbserverport + @";Persist Security Info=True""";
    }
}

接下来我更改了我的DataModel.Designer.cs文件(此类继承自ObjectContext并且自从我使用Ado.net后自动生成),我更改了生成的构造函数:

    public Entities() : base("name=Entities", "Entities")
    {
        this.ContextOptions.LazyLoadingEnabled = true;
        OnContextCreated();

    }

为:

    public Entities() : base(DatabaseHelper.MakeConnectionString(), "Entities")
    {
        this.ContextOptions.LazyLoadingEnabled = true;
        OnContextCreated();
    }

如果你有一个与Web项目无关的项目 - 在我的情况下,它是一个测试项目,你必须将appsettings添加到相关的配置文件(App.config / Web.config)。

完成。

1 个答案:

答案 0 :(得分:0)

在你的web.config中:

<configuration>
  <connectionStrings configSource="connectionString.config" />
</configuration>

在你的新文件connectionString.config中(这是该文件中唯一的代码!):

<connectionStrings>
  <clear />
  <add name="ConnectionStringName" connectionString="..." />
</connectionStrings>

或者就像你在做的那样:

<appSettings>
 <add key="dbserver" value="x.x.x.x" />
 <add key="dbserverport" value="8888" />
 <add key="dbuser" value="user" />
 <add key="dbpassword" value="1234" />
</appSettings>

然后连接你的字符串:

string appDbserver= ConfigurationSettings.AppSettings["dbserver"];
string appDbserverport= ConfigurationSettings.AppSettings["dbserverport"];
string appDbuser= ConfigurationSettings.AppSettings["dbuser"];
string appDbpassword= ConfigurationSettings.AppSettings["dbpassword"];

string myConnectionstring = @"metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=" + appDbserver + @";User Id=" + appDbuser + @";password=" + appDbpassword + @";database=db;port=" + appDbserverport + @";Persist Security Info=True&quot;"