我正在为我们的 ASP.Net 2.0 Web 应用程序添加一个数据访问层,该应用程序几乎完全使用内联 SQL 调用和大量使用复制/粘贴来编写。由于业务问题,我一次只能重构应用程序的一小部分(无法安顿下来并进行大规模的重新设计),所以我必须接受某些设计决策,直到事情足够松散耦合进行重大更改并正确测试它们。
我决定使用企业库数据访问应用程序块作为未来数据访问层的管道,而以前的一个这样的设计决定给我带来了问题。目前,我们根据用户提供的帐户 ID 从管理数据库中获取应用程序的“主”连接字符串,以便我们可以允许应用程序的单个安装访问多个数据库。我的问题涉及试图找出将连接字符串(或帐户 ID)获取到 DAL 的最佳实践方式。
之前的实现是将加密的连接字符串存储在 cookie 中,所以我目前的破解方法是从那里获取连接字符串,然后以下列方式使用 DAAB:
Public Shared Function GetResultsByKeywords(ByVal key1 As String, ByVal key2 As String, ByVal key3 As String, ByVal key4 As String) As DataTable
Dim db As SqlDatabase = New SqlDatabase(Connection.GetConnectString())
Dim dt As DataTable = New DataTable
Using dr As IDataReader = db.ExecuteReader("sel_eHELP_ITEMS", key1, key2, key3, key4)
dt.Load(dr)
End Using
Return dt
End Function
Connection.GetConnectString() 从 cookie 中获取连接字符串。
我知道这远不是最好的方法,我需要修复它,但我正在努力用“正确”的方式来完成它。也许创建一个基类,我可以使用连接字符串进行初始化并从中继承所有其他类,但我不确定它的外观以及我将首先初始化该类的实例的位置。在访问任何 DAL 功能之前的每一页上?
任何指导将不胜感激。谢谢你。
更新
让我澄清一下。一个安装最多会有 3 或 4 个不同的连接字符串。“帐户 ID”不是用户 ID,它被多个用户用来实质上指定要连接到哪个数据库。