数据访问层使用参数填充组合框
Posted
技术标签:
【中文标题】数据访问层使用参数填充组合框【英文标题】:Data Access Layer Populate Combobox With Parameters 【发布时间】:2014-07-29 02:14:51 【问题描述】:我正在使用 VB.Net (Visual Studio 2013) 和 N 层架构来填充组合框列表。我的课程代码如下
Public Shared Function List() As List(Of AppName.BusinessLogic.BLL_RMCodeComboClass)
Dim dbo_RMCodeList As New List(Of AppName.BusinessLogic.BLL_RMCodeComboClass)
Dim connTemp As SqlConnection = AppClass.GetConnection
Dim strSelectSQL As String = "SELECT [RMCode] FROM [dbo].[RMMaster] WHERE [dbo].[RMMaster].[Category] = '" & strRMType & "'"
Dim strCommandSelect As New SqlCommand(strSelectSQL, connTemp)
Try
connTemp.Open()
Dim rdrTemp As SqlDataReader = strCommandSelect.ExecuteReader()
Dim clsdbo_RMCodeList As AppName.BusinessLogic.BLL_RMCodeComboClass
Do While rdrTemp.Read
clsdbo_RMCodeList = New BusinessLogic.BLL_RMCodeComboClass
clsdbo_RMCodeList.RMCode = System.Convert.ToString(rdrTemp("RMCode").ToString)
dbo_RMCodeList.Add(clsdbo_RMCodeList)
Loop
rdrTemp.Close()
Catch ex As SqlException
Throw ex
Finally
connTemp.Close()
End Try
Return dbo_RMCodeList
End Function
我的目标是根据类型使用 RMCode 检索或填充组合框。因此,我相应地使用了 strSelectSQL。请帮我将 Category 的值传递给这个函数,使它变成动态的。 Type 的值是从表示/UI 层上的另一个组合框中选择的,因此应根据所选的 Category 填充 Code 字段。
提前致谢 CL
【问题讨论】:
除了回答您的问题之外,您还应该对代码进行一些更改以使其更好。首先,您的数据访问层依赖于您的业务逻辑层是非常糟糕的。它应该永远是相反的。 DAL 创建并传递给 BLL 的对象应该在 DAL 中定义,或者在 BLL 和 DAL 都引用的单独项目中定义。 DAL 甚至不应该知道 BLL 的存在。 其次,在Catch
块中包含 Throw ex
是不好的。如果你想重新抛出相同的异常,那么你应该使用Throw
。这将重新抛出原始状态的异常,而您正在执行的操作将截断堆栈跟踪,使其看起来像是源自您的方法的异常。也就是说,您的 Catch
块完全没有意义。您只需提供Catch
和Finally
块之一,并且您已经有Finally
,因此只需省略Catch
。
第三,如果你实际上并没有在Catch
块中做任何事情,而你的Finally
块除了处理对象什么都不做,那么你就不需要它。使用Using
语句创建可以被释放的对象,无论是否抛出异常,它们都会自动在End Using
语句处。
感谢和抱歉迟到的回复,jmcilhinney 的提示对我帮助很大。这是我在 N 层的第一次尝试。我仅从浏览网页开始遵循引用/依赖关系。它对项目的部署方式有什么影响吗?该项目将部署在客户端机器和服务器上。请建议或将我指向更具体的链接,在那里我可以获得更多帮助。再次感谢和抱歉。 CL
【参考方案1】:
例如
Private Function List(type As String) As List(Of Thing)
'...
Dim command As New SqlCommand("SELECT * FROM MyTable WHERE @Type IS NULL OR Type = @Type")
command.Parameters.Add("@Type",
SqlDbType.NVarChar,
50).Value = If(String.IsNullOrEmpty(type),
CObj(DBNull.Value),
type)
'...
End Function
这使得过滤器是可选的。如果传入Nothing
或空的String
,则SQL 参数为NULL
并且每条记录都匹配,否则结果集将按传入的值过滤。
【讨论】:
以上是关于数据访问层使用参数填充组合框的主要内容,如果未能解决你的问题,请参考以下文章