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

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

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

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

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

【问题讨论】:

    标签: asp.net connection-string data-access-layer


    【解决方案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”指定的值。非常方便,非常适合在开发、测试和生产环境之间切换。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-25
          • 1970-01-01
          • 2011-06-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-13
          相关资源
          最近更新 更多