【发布时间】:2011-03-12 20:45:23
【问题描述】:
我目前正在使用 Visual Studio 2010 (.Net 4.0) 使用 VB.Net,我需要您的帮助来创建一个集合类(我们称之为“cl_MyCollection”),其构造函数接受两个参数:
-
SqlDataReader对象 - 一些指向我创建的自定义类的方法
场景是;我在 SQL 2000 中有五个数据库表和五个 VB.Net 自定义类。
每个自定义类都包含该类所代表的表的每个字段的变量。
例如:“tbl_User”有 2 个字段“User_ID”和“User_Name”,tbl_Family 有 3 个字段“Family_ID”、“Family_Name”和“Family_Location”。
这是我创建的 VB.Net 自定义类,用于读取和存储“tbl_User”表的单个记录:
Imports System.Data.SqlClient
Public Class cl_table_User
Property User_ID As Integer
Property User_Name As String
Public Sub New(ByRef rdr As SqlDataReader)
Me.User_ID = rdr("User_ID)
Me.User_Name = rdr("User_Name")
End Sub
End Class
我为其他数据库表创建了类似的类。
这个想法是执行一条 SQL 语句并使用结果来实例化我想要的集合类('cl_MyCollection')。 我在想这样的事情:('conn'是一个'SqlConnection'对象)
Dim cmd As SqlCommand = New SqlCommand("Select * From tbl_Users", conn) Dim rdr As SqlDataReader = cmd.ExecuteReader() 将 aCollection 调暗为新的 cl_MyCollection(rdr, "tbl_Users")以后当我想使用“tbl_Family”时:
Dim cmd As SqlCommand = New SqlCommand("Select * From tbl_Family", conn) Dim rdr As SqlDataReader = cmd.ExecuteReader() 将 aCollection 调暗为新的 cl_MyCollection(rdr, "tbl_Family")如您所见,第三行传递了两个参数,SQLDataReader 和一些指向我创建的自定义类的方法。然后这个类的构造函数将遍历结果并创建一个我创建的自定义类的对象。
我希望第二个参数(以某种方式)决定使用哪个自定义类。 “不知何故”是我在这里寻求您帮助的原因。
我认为这可行的唯一方法是设置一个选择案例并列出每个自定义类,然后创建自定义类的一个对象,但我希望有更好的方法。目前我的设置是这样的:
公共类 cl_MyCollection 私人记录作为新收藏 Public Sub New(rdr As SqlDataReader, selectedClass as string) 选择案例 selectedClass 案例“tbl_User” 而(rdr.Read()) 将 thisRecord 调暗为新的 cl_table_User(rdr) 记录。添加(此记录) 结束时 案例“tbl_Family” 而(rdr.Read()) 将 thisRecord 调暗为新的 cl_table_Family(rdr) 记录。添加(此记录) 结束时 结束选择 结束子 结束类理想情况下,我希望以下代码能够工作,或者至少是它所代表的想法:
公共类 cl_MyCollection 私人记录作为新收藏 Public Sub New(rdr As SqlDataReader, selectedClass as TYPE) 而(rdr.Read()) 将 thisRecord 调暗为新的 selectedClass(rdr) 记录。添加(此记录) 结束时 结束子 结束类这可能吗?还是我需要坚持选择案例?
P.S 抱歉这篇文章太长了。 编辑:修正了错字,选择案例现在按原意指向第二个参数('selectedClass')。
【问题讨论】:
-
感谢您的回复,我查看了一些 ORM 技术和 Collections.Generic 库,但我无法理解如何实现它们以适应我现有的代码。我能问一下你们希望我的代码如何看待新想法吗?从那里我应该能够对其进行调整以适应我的项目的其余部分。再次感谢您的帮助。
标签: vb.net class instantiation