VB.Net Arrays mit unbekannter Größe

Timmeey

Mitglied
Hallo,

ich habe ein etwas komplexeres Programm, das auf eine MS Access-Datenbank zugreift und deren Inhalt veranschaulicht und relativ leicht bearbeitet werden kann

Jetzt habe ich allerdings das Problem, dass ich ein Array unbestimmter Länge mit Daten füllen will, wobei dann allerdings der Fehler : "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt." erscheint

Ich habe das Programm hier einmal stark vereinfacht, die Länge des Arrays könnte zwar hier, im vollen Programm jedoch unmöglich vorher bestimmt werden.

Code:
Public data() As String
...
...
...
...
With data_reader
   Do While .Read()
      data(cnt) = .Item("Spalte_1") 'Hier erscheint die Fehlermeldung
   Loop
End With
...
..

Ich verwende für den Datenbank-Zugriff OleDb, das hat aber mit dem eigentlichen Problem recht wenig zu tun.
Das Problem ist eben das, dass man in das String-Array data() nicht einfach einen Wert über einen bestimmten Index speichern kann, also z.b. data(0) = "a"
Gibt es da eine Möglichkeit dies trotzdem zu tun, ohne per ReDim die Länge des Arrays zu definieren?

Mfg Tim
 

Norbert Eder

Erfahrenes Mitglied
Das in ein Array zu wuchten ist eher unklug. Ich würde mir eine Klasse basteln, die der Struktur der Tabelle entspricht und dann die Daten dahin mappen.
 

Timmeey

Mitglied
hmm naja das is ne allgemeine Funktion zum auslesen einer einzelnen Spalte einer x-beliebigen Tabelle.. da wirds mit Struktur ein bisserl schwer..
naja werds trotzdem mal probieren..
 

zovax

Erfahrenes Mitglied
Natuerlich solltest du es frueher oder spaeter in eine eigene Klasse mappen (wie Norbert Eder schon gesagt hat), insbesondere wenn du wirklich intensiv damit arbeiten musst. Unter Umstaenden reicht aber auch ein typisiertes Dataset. Mag zwar von der Performance her nicht an den DataReader ankommen, wenn du allerdings nicht gerade hundertausende an Datensaetzen hast merkst du ohnehin keinen Unterschied.

Allerdings verstehe ich nicht wirklich, warum du nicht einfach die Anzahl der Datensaetze bestimmten kannst? Oder ist die Anzahl der Spalten variabel (Da wuerde ich mir aber ums DB design Gedanken machen :))?
 

Timmeey

Mitglied
naja die Anzahl der Spalten ist sogesehen schon variabel, da diese eine Funktion auf mehrere Tabellen in mehreren Datenbanken angewendet werden kann... atm brauch ichs zwar nur für eine einzige Spalte in einer bestimmten Tabelle, soll aber die Funktion für später gleichmal allgemeingültig schreiben. Die Funktion gibt ein String-Array zurück, das ich dann natürlich einer Klasse bzw eher deren Attribut zuweisen kann ;-)

Aber das Problem hat sich mittlerweile gelöst, ich hatte das mit dem ReDim schonmal probiert gehabt, dann war das Array aber immer leer nachdem ich die Größe geändert hatte... grad eben ist mir eingefallen, dass es ja noch so etwas wie Preserve gibt :rolleyes:

Trotzdem thx für die Hilfe ;)

Mfg Tim
 

Norbert Eder

Erfahrenes Mitglied
Und wenn du nur eine Spalte ausliest, dann kannst du die Daten in zb. eine Hashtable schreiben (id aus der Tabelle ist der Key, wert aus der Tabelle ist der Value). Dann ises schnell und dynamisch.