3

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

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

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

我很感激有人逐步解释我必须做的事情,以便当我将 UI(主项目)设置设计器中的连接字符串传递给 BLL,然后再传递给 DAL。

4

6 回答 6

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 中。

谢谢。

于 2009-05-23T18:19:03.810 回答
1

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

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

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

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

于 2009-05-22T18:52:10.117 回答
1

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

于 2009-05-22T18:55:43.463 回答
0

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

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

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

于 2009-05-23T05:57:00.853 回答
0

我们这样做的方式是在我们的 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”指定的值。非常方便,非常适合在开发、测试和生产环境之间切换。

于 2009-05-22T18:51:29.837 回答
0

您可以添加 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 部分。

祝你好运!

里卡多。

于 2009-05-22T19:06:41.163 回答