2010-09-03 7 views
0

J'ai un petit besoin dans VB.NET et c'est de remplir un tableau avec des valeurs extraites d'une table. C'est-à-dire que j'ai une table appelée "user_roles" et qui a des colonnes appelées "role_id" et "role_name". Dans l'événement de chargement du formulaire, je veux exécuter une procédure et remplir tous les éléments (role_id) de la table "user_roles" dans un tableau.Remplissage d'un tableau avec des éléments d'une table

Quelqu'un peut-il s'il vous plaît aidez-moi sur cette exigence.

Cordialement, George

+0

Question: Comment obtenez-vous l'information? L'extrayez-vous dans un DataSet ou l'insérez-vous dans un DataReader? – XstreamINsanity

+0

Cher, est-il possible de me donner un exemple sur la façon de le faire en utilisant un DataReader. Je n'ai pas essayé cela, mais j'ai une exigence sur la même chose. –

Répondre

2

Je suppose que vous feriez mieux d'utiliser un generic list au lieu d'un tableau. Corrige moi si je me trompe.

Si vous avez rempli votre table dans votre codebehind, vous pouvez ajouter le rolw_id en itérant sur toutes les lignes.

Dim allRoleIDs As New List(Of Int32) 
For Each row As DataRow In user_roles.Rows 
    allRoleIDs.Add(CInt(row("role_id)"))) 
Next 

Considérons qu'il est préférable d'utiliser un Datareader ici pour des raisons de performances. Lorsque vous utilisez un jeu de données fortement typé et que vous souhaitez éviter l'aller-retour supplémentaire après avoir rempli le champ Datatable pour ajouter les ID à la liste, vous devez étendre la classe Dataset DataAdapter générée automatiquement (par exemple, user_rolesTableAdapter).

N'utilisez pas la classe designer.vb du dataset pour cela, car elle sera remplacée lors de chaque modification du dataset. Utilisez sa classe codebehind (sans designer.vb) et ajoutez d'abord le même espace de noms à partir de votre TableAdapter généré automatiquement (par exemple DatasetNameTableAdapter où DatasetName est le nom de votre dataset). Puis ajouter la classe suivante (remplacer les commandes correctes, colonne index, nom de classe de la classe partielle):

Namespace DatasetNameTableAdapters 

    Partial Public Class user_rolesTableAdapter 

     Public Function getListOfUserRolesID() As System.Collections.Generic.List(Of System.Int32) 
      Dim list As New System.Collections.Generic.List(Of System.Int32) 
      Dim command As System.Data.SqlClient.SqlCommand = Me.CommandCollection(0) 

      Dim previousConnectionState As System.Data.ConnectionState = command.Connection.State 
      If ((command.Connection.State And System.Data.ConnectionState.Open) _ 
         <> System.Data.ConnectionState.Open) Then 
       command.Connection.Open() 
      End If 
      Try 
       Using reader As System.Data.SqlClient.SqlDataReader = command.ExecuteReader 
        While reader.Read 
         list.Add(reader.GetInt32(0)) 
        End While 
       End Using 
      Finally 
       If (previousConnectionState = System.Data.ConnectionState.Closed) Then 
        command.Connection.Close() 
       End If 
      End Try 

      Return list 
     End Function 
    End Class 

End NameSpace 

Maintenant, vous pouvez obtenir les user_roles ID est comme liste générique directement à partir du dataAdapter sans itérer deux fois (d'abord sur le remplissage de la datatable et second sur addind les ID à une liste).

Bien sûr, vous pouvez également utiliser cette approche de Datareader dans Page.Load sans utiliser de Dataset.

+0

Merci beaucoup Tim et Generics est une très bonne approche. J'utilise VB.NET 2005 et puis-je utiliser Generics à cet effet? –

+0

@George, oui, vous pouvez utiliser des génériques dans VB.NET 2005. Ils ont été introduits dans .NET 2.0, ce qui est ce que VB.NET 2005 cible. –

+0

bonne suggestion. J'étais sur le point de suggérer un bloc Using, mais ceux-ci n'étaient pas disponibles dans VB avant le 3.5. –

Questions connexes