ASP.NET的连接字符串访问

时间:2013-07-16 18:16:28

标签: asp.net connection-string

有一个asp.net项目(4.0),并试图找出访问连接字符串的最佳方法。

我在web.config文件中有2个连接字符串,一个用于prod,另一个用于测试。有很多aspx页面,我想通过函数或某种全局变量集中调用连接 - 这样当我需要更改连接字符串以指向测试或生产时,我只能在onle place。

任何有关最佳实践的想法。

感谢。

3 个答案:

答案 0 :(得分:4)

  

我在web.config文件中有2个连接字符串,一个用于prod,另一个用于测试。

这是一种不正确的方法。你要做的是保持配置文件是静态的,并在环境之间改变代码,这与你应该做的相反。

在这种情况下,您应该在配置文件中有一个连接字符串,以及两个配置文件(每个环境一个),或者可能是Web.config转换,具体取决于您所使用的工具使用。我们的想法是每个环境都有不同的配置和相同的代码,而不是具有相同配置的不同代码。

因此,在您的配置文件中,您可能会遇到以下情况:

<connectionStrings>
    <add name="myConnectionString" connectionString="Data Source=servername;Initial Catalog=databasename;Integrated Security=True" />
</connectionStrings>

(或者你的实际连接字符串是什么。)

然后在您的代码中,您将使用以下内容访问它:

ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString

每个目标环境都会(可能)在自己的配置文件中拥有自己的连接字符串,但代码不必在环境之间进行更改。

当你想要封装字符串时,你不必在任何地方使用整个ConfigurationManager调用,你当然可以这样做。你是怎么做的取决于你。一种方法可能是在某个对象上有一个静态字段。像这样:

public class DatabaseHelper
{
    public static string ConnectionString
    {
        get
        {
            return ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
        }
    }
}

然后在代码中的其他位置使用连接字符串,您可以使用:

DatabaseHelper.ConnectionString

这绝对是短的。它并没有真正改变连接字符串的访问方式,它只是将其封装在自定义对象后面,以减少单个行上使用的代码量。

答案 1 :(得分:0)

DAL(数据访问层)将为您封装此内容。有很多可供选择:Typed Datasets和TableAdapter是最古老的,也是实体框架,NHibernate,Telerik OpenAccess ...基本上,检索连接字符串不是你不应该为自己编写代码的东西。

另外,正如@David所说,最佳做法是为每个配置单独维护web.config,而不是包含两者的配置。在我们的应用程序中,我们在web.config中有“其他”连接字符串,但它们已被注释掉。

答案 2 :(得分:0)

我赞成大卫的回应。但是会将此添加到对话中。

您可以在app.config中为web.config添加“指针”外部文件。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings configSource="ExternalConnectionStrings.config" />
</configuration>

ExternalConnectionStrings.config的内容

<connectionStrings>
  <add name="MainConnectionString"
       connectionString="blah blah blah "
    providerName="yada.yada.yada" />

</connectionStrings>

你可能有多个 ExternalConnectionStrings.config文件......基于环境。

ExternalConnectionStrings.Development.config
ExternalConnectionStrings.QA.config
ExternalConnectionStrings.Staging.config
ExternalConnectionStrings.Production.config

“权衡”是你必须手动复制这个文件(比如使用Post Build Event)......但它是“干净的”。

然后您只需要更改原始app.config(或web.config)中的一个值

<configuration>
  <connectionStrings configSource="ExternalConnectionStrings.Production.config" />
</configuration>

我不是说我这样做或暗示。但我宁愿你这样做....然后破解原来的app.config文件。

让你的配置文件保持精简和干净................当你试图弄清楚正在使用哪个连接字符串时...你不想拥有思考或解析一些伏都教代码来弄明白。