【发布时间】:2013-06-06 08:48:38
【问题描述】:
我有一个关于 VBNET 的快速问题,我目前正在使用 VS 2012 Express 和 Microsoft Access 作为我的数据库。
我的问题是,我如何将查询放入模块而不是将查询放入表单本身? 假设我在 frmStock 中有这个功能:
frmStock:
Public Sub FillCategory(ByVal Key As String, ByVal Txt As String, ByVal N As TreeNode)
Dim TD As TreeNode
If N Is Nothing Then
TD = tvCategory.Nodes.Add(Key, Txt)
Else
TD = N.Nodes.Add(Key, Txt)
End If
Dim cmd As New OleDbCommand("SELECT * FROM Category WHERE Category_Parent = ?", conn)
cmd.Parameters.AddWithValue("Category_Parent", Key)
Dim dr = cmd.ExecuteReader
Do While dr.Read()
FillCategory(dr("Category_ID"), dr("Category_Name"), TD)
Loop
dr.Close()
cmd.Dispose()
End Sub
我想搬家
Dim cmd As New OleDbCommand("SELECT * FROM Category WHERE Category_Parent = ?", conn)
改为模块。
我试过了:
Module queryCollection
Public getCategoryParent As New OleDbCommand( _
"SELECT * FROM Category WHERE Category_Parent = ?", conn)
End Module
并将我的 FillCategory 函数修改为:
Public Sub FillCategory(ByVal Key As String, ByVal Txt As String, ByVal N As TreeNode)
Dim TD As TreeNode
If N Is Nothing Then
TD = tvCategory.Nodes.Add(Key, Txt)
Else
TD = N.Nodes.Add(Key, Txt)
End If
getCategoryParent.Parameters.AddWithValue("Category_Parent", Key)
Dim dr = getCategoryParent.ExecuteReader
Do While dr.Read()
FillCategory(dr("Category_ID"), dr("Category_Name"), TD)
Loop
dr.Close()
getCategoryParent.Dispose()
End Sub
更新:
我的问题的一些屏幕截图:
我的数据库: http://puu.sh/39CMV.PNG
在将我的查询移入模块之前: http://puu.sh/39D0M.PNG
将我的查询移入模块后: puu.sh/39CVV.PNG
似乎只执行一次(?)为什么会这样?在模块中声明我的查询的正确方法是什么?
我实际上有大量查询,我想将它们存储到一个地方以便更有条理的编码。
【问题讨论】:
-
你真的需要存储查询吗?你不能改用 LINQ to SQL 或 LINQ to EF 之类的东西吗?这比在代码中使用字符串文字查询要好得多。
-
@DoctorJones ,您好,感谢您的回复,我还没有遇到过 LINQ,我正在使用 Microsoft Access 作为我的数据库。我想将所有查询存储到一个模块中,主要是因为我的编码中有太多查询,看起来很乱,我需要组织它。
-
我强烈建议您查看 LINQ to SQL。它消除了代码中的所有字符串文字查询,并将它们替换为强类型查询。这意味着您将在编译时而不是运行时发现拼写错误等,并使您的代码更易于维护。
-
@DoctorJones,非常感谢您提供的信息,稍后我将研究 LINQ 以进行优化:)
标签: sql database vb.net visual-studio-2012