В настоящее время я играю с VB.Net, используя Visual Studio 2010 (.Net 4.0), и мне нужна ваша помощь для создания класса коллекции (назовем его 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() Dim aCollection as new cl_MyCollection(rdr, "tbl_Users")
и позже, когда я захочу использовать tbl_Family:
Dim cmd As SqlCommand = New SqlCommand("Select * From tbl_Family", conn) Dim rdr As SqlDataReader = cmd.ExecuteReader() Dim aCollection as new cl_MyCollection(rdr, "tbl_Family")
Как вы можете видеть, третья строка передает два аргумента: SQLDataReader
и некоторые средства указания на созданный мной настраиваемый класс. Затем конструктор этого класса будет перебирать результаты и создавать объект созданного мной настраиваемого класса.
Я хочу, чтобы второй аргумент (каким-то образом) заставил его решить, какой пользовательский класс использовать. «Каким-то образом» - вот почему я прошу вашей помощи.
Единственный способ, которым я могу подумать, это сработает, - это настроить случай выбора и перечислить каждый настраиваемый класс, а затем создать объект настраиваемого класса, но я надеюсь, что есть лучший способ. В настоящее время у меня это настроено так:
Public Class cl_MyCollection Private records As New Collection Public Sub New(rdr As SqlDataReader, selectedClass as string) Select Case selectedClass Case "tbl_User" While (rdr.Read()) Dim thisRecord as new cl_table_User(rdr) records.Add(thisRecord) End While Case "tbl_Family" While (rdr.Read()) dim thisRecord as new cl_table_Family(rdr) records.Add(thisRecord) End While End Select End Sub End Class
В идеале я бы хотел, чтобы следующий код работал или, по крайней мере, идея, которую он представляет:
Public Class cl_MyCollection Private records As New Collection Public Sub New(rdr As SqlDataReader, selectedClass as TYPE) While (rdr.Read()) Dim thisRecord as new selectedClass(rdr) records.Add(thisRecord) End While End Sub End Class
Это возможно? или мне нужно придерживаться выбранного случая?
P.S Приносим извинения за объем этой публикации. Изменить: исправлена опечатка, случай выбора теперь указывает на второй аргумент ('selectedClass'), как и предполагалось изначально.