Je suis actuellement jouer avec VB.Net en utilisant Visual Studio 2010 (.Net 4.0) et j'ai besoin de votre aide pour créer une classe de collection (appelons-le « cl_MyCollection ») avec un constructeur qui accepte deux arguments:choisir Programmatically la classe pour être instancier
- un objet
SqlDataReader
- Certains moyens de pointer vers une classe personnalisée, j'ai créé
Le scénario est; J'ai cinq tables de base de données dans SQL 2000 et cinq classes personnalisées VB.Net. Chaque classe personnalisée contient une variable pour chaque champ de la table représentée par la classe. Par exemple: « tbl_User » a 2 champs « user_id » et « nom_utilisateur » et tbl_Family » a 3 champs « Family_ID », « FAMILY_NAME » et « Family_Location »
Voici la classe personnalisée VB.Net j'ai créé l'intention. lire et stocker un seul enregistrement de la « tbl_User » tableau.
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
J'ai créé
classes similaires pour les autres tables de base de données l'idée est d'effectuer une instruction SQL et utiliser les résultats pour instancier mon Je pensais à quelque chose comme ça: ('conn' est un objet '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")
et plus tard, quand je veux utiliser « 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")
Comme vous pouvez le voir la troisième ligne passe deux arguments, la SQLDataReader
et des moyens de pointer vers une classe personnalisée je créé. Le constructeur de cette classe va ensuite parcourir les résultats et créer un objet de la classe personnalisée que j'ai créée.
Je veux que le second argument (en quelque sorte), il est de décider quelle classe personnalisée à utiliser. Le 'en quelque sorte' est pourquoi je suis ici pour demander votre aide. La seule façon que je peux penser que cela fonctionnera est de mettre en place un cas de sélection et de lister chaque classe personnalisée, puis de créer un objet de la classe personnalisée, mais j'espère qu'il y aura un meilleur moyen. À l'heure actuelle, je l'ai mis en place comme ceci:
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
Idéalement je voudrais le code suivant au travail, ou au moins l'idée qu'il représente:
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
Est-ce possible? ou dois-je rester avec le cas choisi?
P.S Désolé pour la longueur de ce message. Modifier: Correction d'une faute de frappe, le cas de sélection pointe maintenant vers le second argument ('selectedClass') comme prévu à l'origine.
Avez-vous regardé les ORM? –
Merci pour les réponses, j'ai jeté un oeil à quelques techniques ORM et à la librairie Collections.Generic mais j'ai du mal à comprendre comment implémenter l'une ou l'autre pour s'adapter à mon code existant. Puis-je vous demander comment vous attendez que mon code apparaisse avec les nouvelles idées? De là, je devrais être capable de l'adapter à la suite de mon projet. Merci encore pour toute aide. – user328414