私はデータベースの各レコードの2ビットの情報を保持する多次元配列を構築しようとしています。 ID、説明。
これは私が現在やっていることです。
_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
_
ここでの問題は、mArray(i,0)
のi
が好きではないことです。誰かこれについて何か考えがありますか?これは_Object reference not set to an instance of an object.
_で示されるエラーです
助けてくれてありがとう。
ナルム
List Class および Dictionary Class を使用しないのはなぜですか
むしろ、キーと値の両方の文字列を使用して、辞書のリストを作成できます。キーはキーを表すことができます(例ではIDと説明、値はこれまでに保存されたものにすることができます)。
何かのようなもの
Dim values As New List(Of Dictionary(Of String, String))()
そして、whileループのようなもの
values.Add(New Dictionary(Of String, String)() From { _
{"id", cmdReader.Item("id")} _
})
values.Add(New Dictionary(Of String, String)() From { _
{"description", cmdReader.Item("description")} _
})
その後、foreachを使用できます
For Each value As Dictionary(Of String, String) In values
Dim id As String = value("id")
Dim description As String = value("description")
Next
または
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
これを試して
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
問題は、アレイを初期化していないことです。
これは、i
が初期化で設定された制限に達しないまで機能します。
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
しかし、配列の制限が不明な場合は、従うことをお勧めします アスタンダーの提案 .
これは私にとってはうまくいきます:
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