В настоящее время я играю с 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'), как первоначально предполагалось.
Вы смотрите на ORM? –
Спасибо за ответы, я взглянул на несколько методов ORM и библиотеку Collections.Generic, но у меня возникли проблемы с пониманием того, как реализовать любой из них в соответствии с моим существующим кодом. Могу ли я спросить, как вы, ребята, ожидаете, что мой код будет выглядеть с новыми идеями? Оттуда я должен был бы приспособить его к набору остальной части моего проекта. Еще раз спасибо за любую помощь. – user328414