J'essaie de construire un tableau multidimensionnel qui contiendra deux bits d'information pour chaque enregistrement dans une base de données, par exemple. identifiant, description.
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 la 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
Pourquoi ne pas plutôt utiliser List Class et Dictionary Class
Vous pouvez alors plutôt créer une liste de dictionnaires, avec la clé et valoriser les 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 jamais é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 pourriez alors 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
Essaye ça
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
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 ne sont pas connues, je suggère de suivre la suggestion d’astander .
Cela fonctionne pour moi:
Dim values As New List(Of Dictionary(Of String, String))()
values.Add(New Dictionary(Of String, String)() From {{"quarter", q1.ToString}, {"year", y1.ToString}})
values.Add(New Dictionary(Of String, String)() From {{"quarter", q2.ToString}, {"year", y2.ToString}})
values.Add(New Dictionary(Of String, String)() From {{"quarter", q3.ToString}, {"year", y3.ToString}})
values.Add(New Dictionary(Of String, String)() From {{"quarter", q4.ToString}, {"year", y4.ToString}})
For Each value As Dictionary(Of String, String) In values
Dim quarter As String = value("quarter")
Dim year As String = value("year")
Debug.Print(quarter & "/" & year)
Next