【问题标题】:Where should I put my connectionString in ASP.Net 3.5?在 ASP.Net 3.5 中我应该将 connectionString 放在哪里?
【发布时间】:2009-04-24 05:40:08
【问题描述】:

我有两个项目:

  1. ASP.Net 3.5 网站(前端,UI)
  2. VB 类库(数据访问逻辑)

我应该在哪里保存我的connectionString,以便我可以从类库中使用if?这对我部署/发布时的放置位置有何影响?

注意:

  1. 我不想将它传递给我的 VB 类中的每个函数

【问题讨论】:

    标签: asp.net-3.5


    【解决方案1】:

    根据您构建 DAL 的方式(LINQ、TableAdapters 等),它可能会自动在 web.config 文件中查找它。如果您通过设计器创建了 DAL,它可能会将默认连接字符串存储在您的类库的 app.config 文件中。我将连接字符串部分从 app.config 文件复制到我的 web.config 并将连接字符串更改为正确的数据库(我有单独的 web.config 用于 DEV/QA/PROD)。这使得它变得微不足道,因为设计器生成的代码已经实现了从配置文件中检索它的代码。

    如果您正在手动编写 DAL 并需要传入连接字符串,我建议设置一个强类型配置类,该类与 web.config 接口并延迟加载您的配置值。使用工厂创建你的 DAL 并通过构造函数将配置类注入你的工厂,以便它知道如何使用从配置文件中检索到的连接字符串来创建你的 DAL。

    【讨论】:

    • 感谢您的回复。我在哪里可以阅读有关使用工厂的更多信息?我不知道那是什么(脸红)。
    • 经典参考是 Erich Gamma 等人的设计模式 (en.wikipedia.org/wiki/Design_Patterns_(book))。人。工厂基本上是一个专门的类,其中包含工厂方法(参见参考链接),这些方法用于将创建代码与使用对象的类分离。
    【解决方案2】:

    我的问题来自于我花了半天的时间尝试完成这项工作,但在部署时我一直连接错误(我使用另一个数据库)。

    我的问题是,我正在使用

    My.Settings.DefaultConnectionString
    

    ...在我的 VB 类库中检索 connectionString。

    在关注 tvanfossons anwer 之后,我又挖了一些,发现我可以简单地使用(在引用 system.configuration 之后):

    System.Configuration.ConfigurationManager.ConnectionStrings.Item("DefaultConnectionString").ConnectionString
    

    它在 web-config 中查找 webapplications 和在 app.config 中查找 windows/类库应用程序。

    我很高兴它现在可以工作,但更高兴我知道为什么。 ;)

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,我最终使用 System.Configuration.ConfigurationManager 类从我的类库中获取存储在我的 web.config 文件中的连接字符串,就像 Kjensen 的回答所建议的那样。这很有效,如果我有更多经验,我会投票赞成这个答案。

      我需要连接字符串来构建我的 Linq2Sql 数据上下文,该方法提供给我。

      我现在像下面这样构建我的数据上下文(记得添加对 System.Configuration 的引用)-

      public MyDataContext() : base(System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"] .ConnectionString, mappingSource)

      只要 web.config 文件包含“MyConnectionString”,配置管理器就会负责其余的工作。

      【讨论】:

      • 因此 ConfigurationManager 在某种程度上是全局的,它根据项目类型使用不同的上下文。在 webApp - web.config 中。那正确吗?在这些情况下通常推荐什么,添加对 ConfigManager 的引用或以某种方式将连接字符串作为参数传递给构造函数?
      • 我不确定我是否理解您的问题,据我了解,ConfigurationManager 会读取 web.config(或 app.config,具体取决于项目类型)并为您提供相关部分,如果它们存在。对我来说,使用 ConfigManager 似乎比将字符串作为构造函数传递(无论如何你必须从 Configuration [或至少应该] 获得)更干净,这真的取决于你觉得我觉得舒服,我没有看到任何优势不使用 ConfigManager 方法。
      【解决方案4】:

      我们将我们的保留在每个服务器的 machine.config 中,并有一个自定义 DAL 来处理我们的网络应用程序的所有数据库交互。

      【讨论】:

      • 我部署到托管环境,所以很遗憾无法访问 machine.config
      【解决方案5】:

      将它放在连接字符串部分的 web.config 中。

      在 VB 项目中使用 HttpContext.Current.GetSection 来检索节。

      【讨论】:

      • 嗯.. 当我想从 Windows 应用程序使用类库时该怎么办?必须有一种方法可以使其在不发送连接字符串作为参数的情况下同时适用于两者?
      • @Kjensen:我想你没抓住我的意思。您可以在 VB 项目中使用 HttpContext.Current,无需将任何内容作为参数传递。
      • 我说得不够清楚。 :) 当前的前端是一个 webapp,所以我可以使用 vb 类库中的 httpcontext。但是如果我把一个windows-application作为前端,我就不能使用httpcontext(因为显然没有http-context可用)。
      • @Kjensen:我明白了,在这种情况下,您使用配置管理器的其他建议将起作用,尽管在 Web 解决方案中不太理想,但是当您希望 DAL 工作时,这实际上并不重要两种情况(因为无论如何 DAL 对于至少一种情况都不是最佳的)。
      【解决方案6】:

      一位开发人员曾经的想法是,我们应该将所有连接字符串存储在数据库表中。

      不要尝试这样做。你不会走得很远。 :)

      【讨论】:

        猜你喜欢
        • 2020-09-30
        • 2017-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-25
        • 2013-08-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多