2010-11-23 4 views
9

J'essaie de construire un tableau multidimensionnel qui contiendra deux bits d'information pour chaque enregistrement dans une base de données, par exemple. id, description.Construction d'un tableau multidimensionnel dans vb.net

C'est ce que je suis en train de faire.

Dim mArray(,) As String 
Dim i As Integer = 0 
While cmdReader.Read() 
    mArray(i,0) = cmdReader.Item("id") 
    mArray(i,1) = cmdReader.Item("description") 
    i = i + 1 
End While 

Le problème que j'ai ici est qu'il n'aime pas le i dans mArray(i,0). Quelqu'un a des idées à ce sujet? C'est l'erreur qui est donnée Object reference not set to an instance of an object.

Merci pour toute aide.

Nalum

Répondre

13

Pourquoi ne pas plutôt faire usage de List Class et Dictionary Class

Vous pouvez ensuite créer plutôt une liste de dictionnaires, avec la clé et la valeur des deux chaînes. La clé peut alors représenter votre clé (identifiant et description dans votre exemple, et la valeur peut être ce qui a déjà été stocké).

Quelque chose comme

Dim values As New List(Of Dictionary(Of String, String))() 

puis dans la boucle while quelque chose comme

values.Add(New Dictionary(Of String, String)() From { _ 
    {"id", cmdReader.Item("id")} _ 
}) 
values.Add(New Dictionary(Of String, String)() From { _ 
    {"description", cmdReader.Item("description")} _ 
}) 

Vous pouvez ensuite utiliser foreach

For Each value As Dictionary(Of String, String) In values 
    Dim id As String = value("id") 
    Dim description As String = value("description") 
Next 

Ou un pour

For i As Integer = 0 To values.Count - 1 
    Dim value As Dictionary(Of String, String) = values(i) 
    Dim id As String = value("id") 
    Dim description As String = value("description") 
Next 
+0

Est-ce que je puis être en mesure de boucler sur qu'utiliser pour/foreach? Je ne sais pas grand chose à propos de .net a été jeté dedans pour ce projet. – Nalum

+0

Voir la réponse éditée à votre question. –

+0

Merci astander, va donner un coup de feu, on dirait que ça va faire l'affaire. – Nalum

3

Le problème est que vous n'initialisez pas le tableau.

Cela devrait fonctionner jusqu'à ce que i n'atteigne pas les limites définies lors de l'initialisation.

Dim mArray(100,100) As String 
Dim i As Integer = 0 
While cmdReader.Read() 
    mArray(i,0) = cmdReader.Item("id") 
    mArray(i,1) = cmdReader.Item("description") 
    i = i + 1 
End While 

Mais si les limites du tableau I ne sont pas connus suggèrent de suivre astander's suggestion.

+0

Malheureusement les limites sont inconnues, j'ai fatigué de faire 'Dim mArray (, 2)' mais on m'a dit de mettre un nombre dedans pour la première partie du tableau. – Nalum

5

Essayez cette

Dim mArray(1,1) As String 
Dim i As Integer = 0 
While cmdReader.Read() 
    mArray(i,0) = cmdReader.Item("id") 
    mArray(i,1) = cmdReader.Item("description") 
    i = i + 1 
    ReDim Preserve mArray(i,1) 
End While 
-2

corriger en

Dim mArray(,) As String = ""