有一个 asp.net 项目(4.0),并试图找出访问连接字符串的最佳方法。
我在 web.config 文件中有 2 个连接字符串,一个用于生产,另一个用于测试。有很多aspx页面,我想通过一个函数或者某种全局变量来集中调用连接——这样当我需要更改连接字符串指向测试或生产时,我只能在唯一的地方。
任何关于最佳实践的想法。
谢谢。
有一个 asp.net 项目(4.0),并试图找出访问连接字符串的最佳方法。
我在 web.config 文件中有 2 个连接字符串,一个用于生产,另一个用于测试。有很多aspx页面,我想通过一个函数或者某种全局变量来集中调用连接——这样当我需要更改连接字符串指向测试或生产时,我只能在唯一的地方。
任何关于最佳实践的想法。
谢谢。
我在 web.config 文件中有 2 个连接字符串,一个用于生产,另一个用于测试。
这是一种不正确的做法。您要做的是保持配置文件静态并在环境之间更改代码,这与您应该做的相反。
在这种情况下,您应该在配置文件中有一个连接字符串和两个配置文件(每个环境一个),或者可能是一个 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
这肯定更短。它并没有真正改变访问连接字符串的方式,它只是将它封装在一个自定义对象后面,以减少在各个行上使用的代码量。
DAL(数据访问层)将为您封装它。有很多可供选择:Typed Datasets 和 TableAdapters 是最古老的之一,也是 Entity Framework、NHibernate、Telerik OpenAccess ...基本上,检索连接字符串不是您不必为自己编写代码的事情。
此外,正如@David 所说,最佳做法是为每个配置单独维护一个 web.config,而不是同时包含两者。在我们的应用程序中,我们确实在 web.config 中有“其他”连接字符串,但它们被注释掉了。
我赞成大卫的回应。但会将其添加到对话中。
您可以在 web.config 的 app.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 文件。
保持配置文件简洁干净......当你试图找出正在使用的连接字符串时......你不想思考或解析一些伏都教代码来弄清楚。