Datenbank updaten (insert und update)

JaLeo

Mitglied
Hallo Leute,

Also, ich hab jetzt folgendes Problem.

Ich lese aus einem XML-File daten, habe diese dann in einem dataset und schreibe sie mittels einem DataAdapter in die Datenbank. Wenn keine Daten in der Datenbank bzw. in den jeweiligen tabellen enthalten sind funktioniert das einwandfrei.

D.h. der Insertbefehl funktioniert.
Hab ich jedoch schon einen datensatz mit der jeweiligen Datensatz-ID in der Tabelle und ich will diesen Datensatz updaten (ändern) gibt er mir einen Fehler aus, das schon ein Datensatz mit dieser ID vorhanden ist.

Wie muss ich da vorgehen damit das funktioniert?

Mfg Leo
 

Ignus

Mitglied
Hallo,

also wenn wirklich doppelte IDs vorkommen können und es aber genau deswegen nicht klappt, dann liegt es an deiner Definition für die Daten der jeweiligen Spalte (bei dir 'id').
In Access gibt es direkt die Option 'Doppelte Werte zulassen' für die jeweilige Spalte, wenn du deine AccessDB mit Access öffnest. Dadurch könntest du später aber auch Probleme beim auslesen dieser bekommen, wenn wirklich doppelte Werte vorkommen. Ich würde deswegen eine zusätzliche ID-Spalte einfügen, welche die wirkliche Nummerierung der Rows wiederspiegelt. Das kann einiges erleichtern.
Sprich:
--------------------------------------------
| ID | ID_DATAS | DATAS |
--------------------------------------------

Bei den anderen DBs wie Oracle oder SQL weis ich grad nicht wie es dort ist *g* , das müsst ich nochmal nachschaun, kann mir aber dann vorstellen dass es dort ähnlich sein müsste.
Ich nehm jetzt einfach mal an es ging nur um eine AccessDatenbank. ^^'
 

JaLeo

Mitglied
Richtig, es handelt sich um eine MS Access db.

Also, es is so, ich exportiere ein paar tabellen und schreibe diese dann in eine andere Db.
Wenn ichs das erste mal einlies (wie schon erwähnt) funktioniert alles prächtig.

Dann änder ich einen datensatz in der originalen DB und exportiere dann diese wieder. Bei diesem update kommt dann der fehler das schon eine Datensatz mit dieser ID vorhanden ist. sollte aber einfach nur die Daten updaten..

Mfg
 

Ignus

Mitglied
Achso, sorry hatte mich verlesen, dachte du wolltest neue Daten jeweils hinzufügen und nicht vorhandene abändern. Hattest du es dennoch mal probiert die Spalte ID so abzuändern dass mehrere gleiche IDs möglich sind? Wäre mein Versuch gewesen ^^

Ansonsten wärs auch nicht schlecht würdest du deinen Code mit dem DataAdapter und der exsakten Fehlerbeschreibung hier posten. Weil wenn du mir jetzt sagst "gibt er mir einen Fehler aus, das schon ein Datensatz mit dieser ID vorhanden ist. " Dann könnts ja auch sein dass die ID im DataAdapter (generiert) für den globalen Datensatz die selbe ist und er deswegen nichts macht, oder eben eine ID in einer Tabelle...
.. der DataAdapter ist vielleicht irgendwie doch noch nicht neu eingelesen/initialisiert oder und entleert zuvor.
Wenn ich den code nicht sehe kommen mir so lauter 'dumme' gedanken, was man da alles machen könnte *g*
 
Zuletzt bearbeitet:

Norbert Eder

Erfahrenes Mitglied
@Ignus: Er will die Daten abgleichen, nicht Dubletten (doppelte Datensätze) anlegen.

Das was du vorhast entspricht wohl eher einer etwas komplizierteren Sache. D.h. ich würde dies manuell machen und entsprechend vorher nachfragen, ob die ID bereits vorhanden ist. Wenn ja, machst du ein Update, wenn nein, ein Insert.
 

Ignus

Mitglied
Hallo Norbert, ich hatte mich schon zuvor schon richtiggestellt ;)
Ausserdem bekommt er ja gerade dann den Fehler "gleiche ID" wenn er ein Update mit gleicher ID nur geänderten Datensatz machen will. D.h. ohne Code geht hier garnix ^^
Aber hast recht, ich würde es auch nicht über die DataAdapter.Update Methode machen, denn ich kann mir gut vorstellen dass sowas enorm Netzwerklastig sein wird, weil dabei aus jeder Tabelle in jeder Spalte jede Zeile überprüft werden muss auf Richtigkeit.
Für ein Firmennetzwerk kann sowas der Tod sein, wenn es genug Aufträge dieser Art in den DBs gibt.
 
Zuletzt bearbeitet:

Neue Beiträge