需要指导 ASP.Net 应用程序连接字符串

Posted

技术标签:

【中文标题】需要指导 ASP.Net 应用程序连接字符串【英文标题】:Guidance needed ASP.Net app connection string 【发布时间】:2010-10-28 07:31:12 【问题描述】:

Net 2.0 / Visual Studio 2005 / ASP.Net 网络应用程序

我在这个网站上阅读了很多帖子和 cmets,但有些帖子对我来说太混乱了,或者有些不符合我的要求。

所以我有一个 3 层应用程序 - UI、BLL、DAL。在我的 DAL 中,我通过从服务器资源管理器中拖动存储过程来创建数据集。所以连接字符串被硬编码到数据集文件中。

我希望有人能逐步解释我必须做的事情,以便当我将 UI(主项目)中的连接字符串传递给 BLL,然后再传递给 DAL 时。

【问题讨论】:

【参考方案1】:

这是一个非常有趣的场景,因为我有时在我的多层应用程序中使用数据集,所以我之前已经经历过这种情况。所以这是解决方案。

我假设除了 UI 之外,所有的都是 BLL、DAL 的类库项目。在 DAL 中,您将拥有数据集设计器,它将连接字符串放在 DAL 类库 prj 的 app.config 下。现在,如果您需要引用 DAL 上方的 BAL,它又是一个类库项目,请从 DAL 的 app.config 中复制 connectionStrings 部分并将其粘贴到 BAL 类库项目的 app.Config 的 connectionStrings 部分。在这里您必须注意到连接字符串名称不仅仅是“myDataBaseConnStr”。它将带有详细的命名空间参考,例如 MyApp.DataLayer.DataSet.myDataBaseConnStr。您应该使用 UI 层 app.config 或 web.config 执行相同的过程。成功完成此操作后,您可以更改 UI 层应用程序 [web.config 或 app.config] 的根配置文件中的 connectionString。这样,它将始终从 UI 层获取 connectionString,因为那是运行时正在执行的 AppDomain。因此,您可以在那里更改连接字符串并将其反映在底层 BAL 和 DAL 中。

谢谢。

【讨论】:

您提供了一个非常好的解决方案。我喜欢..我们有同样的问题,我们添加了从 web.config 获取连接字符串的自定义类,然后在使用 tableadapter 时手动打开连接【参考方案2】:

最后,我的问题是:有没有办法在运行时覆盖 DAL 项目设置设计器中设置的连接字符串? ..以便 DAL 中的数据集可以将此连接字符串用于表适配器。

我在另一篇文章中读到,如果您在主项目的“设置”中拥有同名的属性(与 DLL 中的属性相同),那么子项目 (DLL) 会获取该属性的值以覆盖该值在它自己的设置中为它设置。

任何示例如何做到这一点?

【讨论】:

【参考方案3】:

您可以添加 web.config 的一个特殊部分,称为 connectionStrings。你添加到 web.config:

  <connectionStrings>
    <add name="oracle" connectionString="Data Source=server; User ID=user; Password=password;"/>
  </connectionStrings>

然后在你的 C# 代码中:

string connString = ConfigurationManager.ConnectionStrings["oracle"].ConnectionString;

我知道它比第一个示例复杂一些,但它有助于保持配置文件的组织性,特别是随着该文件变得越来越复杂,您将学会重视此 connectionStrings 部分。

祝你好运!

里卡多。

【讨论】:

【参考方案4】:

我猜设计师会在你拖动 sp 时为你创建一个 tableAdapter。适配器上有一个 Connection 属性,您可以为适配器设置该属性以用于填充数据表。我同意其他人的观点,即您希望将连接信息放在配置文件或存储配置的其他位置。我也不喜欢拖放到设计器中,但这应该可以管理数据库连接。

【讨论】:

是的,你是对的 - 我在我的 DAL 中使用表适配器: public class DALCustomer public DataTable getLookupDT(string strLookupCatgy) DataTable dt = null; switch (strLookupCatgy) case "Representative": dt = new taSalesRep().GetData();休息;案例“分支”:dt = new taBranch().GetData();休息; 返回 dt; 所以,我可以在表适配器上设置连接属性.. 但是有点乱.. 还有其他选择吗? 我不是数据表的忠实粉丝...您可以手动填写表格...无需适配器。 如果您查看表适配器的属性窗口,您可以看到 Connection 属性。该属性具有连接信息所在的位置,我猜它默认是从配置文件中提取出来的。 所以设计者应该已经将它添加到 web.config 文件中...假设适配器在 web 项目中而不是在另一个库中。【参考方案5】:

如果可能的话,我会避免拖放编码。如果你玩太多魔法,你会被烧死的。

连接字符串应仅位于应用程序中的一个位置。如果您的所有层都与连接字符串有关,那么这是一个问题。您的 DAL 应该是与连接字符串相关的唯一层。

让 DAL 获取连接字符串的一个好方法是通过 IoC(控制反转)。这样您就不必通过所有构造函数传递连接字符串。

数据集有些过时了。如果您正在开发一个新应用程序,您可能会考虑使用 ORM,例如 NHibernate 或 Linq

【讨论】:

拖放是快速的方法。我不想写所有代码,因为很容易可视化不同数据表中的列和相应的数据检索/插入数据集中表适配器上的 /update 函数。所以没有解决方案..? 是的,但是除非您了解拖放界面正在为您输入的代码,否则您会陷入困境。就像你一样。【参考方案6】:

我们这样做的方式是在 web.config 文件中包含连接字符串(app.config 也可以)。示例:

<add key="ConnectionString" value="Data Source=localhost;Initial Catalog=MyDatabase;User ID=username;Password=abc123"/>

然后,在 DAL 中,我们使用如下内容:

using (var connection = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"])) 
    using (var command = new SqlDataAdapter("MyStoredProc", connection)) 
        command.SelectCommand.CommandType = CommandType.StoredProcedure;
        var categories = new DataSet();
        command.Fill(categories);
        return categories;
    

您可以使用 ConfigurationManager.AppSettings["Whatever"] 从 .config 文件中提取“Whatever”指定的值。非常方便,非常适合在开发、测试和生产环境之间切换。

【讨论】:

以上是关于需要指导 ASP.Net 应用程序连接字符串的主要内容,如果未能解决你的问题,请参考以下文章

经验之谈:MySQL与ASP.NET配合更强大[2]

如何在 asp.net Web 应用程序中连接多个数据库?

ASP.NET 的连接字符串 [重复]

在非 ASP.Net 应用程序中加密连接字符串

如何动态更改连接字符串 ASP.NET

.NET / LINQ-SQL / ASP.NET 中的连接字符串地狱