需要指导 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 应用程序连接字符串的主要内容,如果未能解决你的问题,请参考以下文章