指导需要ASP.Net app连接字符串

时间:2009-05-22 18:38:31

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

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

我在这个网站上阅读了很多帖子和评论,但有些内容对我来说太难以理解,或者其他人不符合我的要求。

所以我有一个3层应用程序 - UI,BLL,DAL。在我的DAL中,我通过来自Server Explorer的draggin storedprocedures创建了DataSet。因此,连接字符串被硬编码到数据集文件中。

我很感激有人一步一步解释我必须要做的事情,以便在UI(主项目)中将连接字符串传递给BLL然后再向下传递给DAL。

6 个答案:

答案 0 :(得分:1)

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

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

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

DataSet有点过时了。如果您正在使用新应用程序,则可以考虑使用ORM,例如NHibernate或Linq

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

感谢。

答案 3 :(得分: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”指定的值。非常方便,非常适合在开发,测试和生产环境之间切换。

答案 4 :(得分:0)

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

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

然后在你的C#代码中:

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

我知道它比第一个例子稍微复杂一点,但它有助于保持配置文件的有序性,特别是当这个文件变得越来越复杂时,你将学会重视这个connectionStrings部分。

祝你好运!

里卡多。

答案 5 :(得分:0)

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

我在另一篇文章中读到,如果你在主项目的设置中有相同名称的属性(如在DLL中),则子项目(DLL)会获取该属性的值,而不是值在它自己的设置中为它设置。

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