VisualBasic .NET Daten in Access-Datenbank schreiben

blumentopf

Cadet 4th Year
Registriert
Juni 2004
Beiträge
121
Hallo,

seit Tagen versuche ich Daten aus einem Array in eine Access Datenbank zu schreiben, krieg es aber nicht hin.

Ich habe ein 2-Dimensionales Array welches Zeile für Zeile die Daten enthält, welche in eine DB geschrieben werden sollen.

In Access habe ich jetzt per Hand eine Tabelle mit den passenden Spalten-Bezeichnern erstellt.

Die AccessDB habe ich per DragAndDrop ins Visual Studio gezogen. Die .mdb befindet sich jetzt auch im Projektmappen-Explorer und in der .xsd Datei kann ich auch die einzelnen Tabellen sehen (es gibt mehrere, sind aber alle ähnlich aufgebaut).

Jetzt möchte ich gerne mit einer For-Schleife Zeile für Zeile durchgehen und immer eine Zeile erstellen und dann zur Datenbank schicken.

So:
For zaehler = 0 to anzahlZeilen
accessDB.Spalte1 = array(zaehler ,0)
accessDB.Spalte2 = array(zaehler ,1)
accessDB.Spalte3 = array(zaehler ,2)
accessDB.Spalte4 = array(zaehler ,3)
accessDB.Spalte5 = array(zaehler ,4)

zeile an datenbank schicken
next

Ich hoffe ihr vesteht wie ich das meine ;)

Habe schon auf www.galileocomputing.de im eBook gelesen, aber hat mir nichts gebracht.

Im Internet nach Beispielen habe ich auch gesucht:
http://www.tutorials.de/forum/net-datenverwaltung/254257-vb-net-access-anbindung-anf-nger.html
da habe ich aber auch den gleichen Fehler und krieg ihn nicht weg :(

Ich hoffe hier kann mir einer helfen!

Gruß
sascha
 
AW: VB.NET Daten in Access-Datenbank schreiben

Erstmal wäre es schön, wenn du uns den Fehler nennst, den du bekommst, sonst können wir lange im Heuhaufen suchen.
Und dann könntest du auch noch den Code, bei dem der Fehler kommt, hier posten, das liest sich sicher leichter als dein Pseudocode.
Weisst du, wie man mit einem DataSet arbeitet?
 
AW: VB.NET Daten in Access-Datenbank schreiben

Ne, mit dem Dataset habe ich noch nie gearbeitet und in im Internet habe ich keine Erklärung gefunden die für mich verständlich war.

Den Code kann ich nicht eins zu eins posten, da ich die Aufgabe während meiner Ausbildung mache. Möchte da keinen Ärger bekommen.

Aber ich kann das gleich mal anpassen und posten. Der Fehler ist aber genau der gleiche, wie im verlinkten Thread. DataSet scheint Nothing zu sein (muss man da nicht mit "New" ein Objekt von erzeugen?)
 
AW: VB.NET Daten in Access-Datenbank schreiben

'**********************

Dim objConnection As OleDb.OleDbConnection = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; " & _
"Data Source=C:\Dokumene und Einstellungen\Benutzer\Meine Dokumente\Datenbank.mdb")
Dim objDataAdapter As OleDb.OleDbDataAdapter
Dim objDataSet As DataSet
Dim objDataView As DataView

...
For iZaehlerZeilen As Integer = 0 To intZeilen
Dim cb As OleDbCommandBuilder = New OleDbCommandBuilder(objDataAdapter)
objDataSet = New DataSet()

objConnection.Open()

Dim row As DataRow = objDataSet.Tables("Tabellenname").NewRow

row("SpalteEins") = excelDaten(iZaehlerZeilen, 0)
row("SpalteZwei") = excelDaten(iZaehlerZeilen, 1)
row("SpalteDrei") = excelDaten(iZaehlerZeilen, 2)
row("SpalteVier") = excelDaten(iZaehlerZeilen, 3)

objDataSet.Tables("Tabellenname").Rows.Add(row)
objDataAdapter.Update(objDataSet, "Tabellenname")

next

'**********************

Folgender Fehler kommt bei der roten Zeile: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

und

objDataSet.Tables("Tabellenname") Nothing

Ich schätze, das hier der Fehler liegt. Aber ich weiß nicht wie das korrekt gefüllt wird.

Das ganze könnte etwas zerstückelt sein, da ich halt im Internet nach Lösungen gesucht habe und viel kopiert hab.
 
Zuletzt bearbeitet:
AW: VB.NET Daten in Access-Datenbank schreiben

Sinnvoll bei solchen Sachen ist es auf jeden Fall, Die Objekte einzeln zu referenzieren und noch besser, wenn du dich damit auskennst, einen Haltepunkt bei der Zeile zu setzen und die verdächtigen Objekte als Überwachung zu beobachten.

Du sagst, objDataSet.Tables("Tabellenname") Nothing kommt als Fehler, das lässt darauf schließen, dass entweder das DataSet Objekt nicht initialisiert ist, oder es die Tabelle mit diesem Namen nicht gefunden hat, weswegen du dort auch keine neue Zeile erstellen kannst.
 
Meiner Meinung nach ist die Sache mit den Datasets eine ziemliche Murkserei, auch wenn Microsoft die so gerne hat. Man kann zwar schnell einmal was per Drag and Drop reinziehen, aber dann steht man schnell einmal an.

Ich würde mich einfach per SQLConnection auf eine Datenbank verbinden und dann SQL Statements absetzen. Abgesehen davon, dass das 10 mal einfacher ist, ist es auch wesentlich performanter. Die Performance bei den Datasets egal in welcher Implementierung ist meistens unter aller Sau. Das gilt übrigens auch für LINQ to SQL. Das ist ca. 5-10 mal langsamer als direkt SQL Statements absetzen und das war noch die schnellste Variante, die ich gefunden habe.

Wenn du willst, dann kann ich dir den Code für meine Klasse DB schicken. Die enthält die wichtigsten Funktionen zum Zugriff (z. B. Updates durchführen, einzelne Werte auslesen, einen Datensatz, mehrere Datensätze, Umwandeln von Strings zu SQL Strings (' ersetzen) usw.
 
Zurück
Oben