Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Cannot add or update a child row
-Hades-
myCSharp.de - Member



Dabei seit:
Beiträge: 171
Herkunft: Deutschland NRW

Themenstarter:

Cannot add or update a child row

beantworten | zitieren | melden

verwendetes Datenbanksystem: mySql 5.6.11

Hallo,

ich habe meine komplette Datenbank auf Guid für die Primärschlüssel umgestellt. Der Grund ist, dass ich den Schlüssel direkt selbst bestimmen möchte ohne den Umfang zum Datenbankserver. Dadurch kann ich dann mehrere Zeilen erstellen und die Fremdschlüssel zuweisen ohne vorher was committen zu müssen. Das hat auch alles wunderbar geklappt, bis jetzt.
Jetzt bekomme ich immer eine Exception: Cannot add or update a child row: a foreign key constraint fails

und zwar will er eine Zeile einfügen, die per Fremdschlüssel auf eine andere Zeile verweist, die aber noch nicht committed ist und demnach meint er das geht nicht.
Bis vorgestern wurde das allerdings problemlos committed.
Ich habe eine neue Xampp-Version installiert und damit auch eine neuere MySql-Version (denke ich). Ich denke es liegt daran aber vielleicht irre ich mich auch.
Weiß jemand wie ich das alte Verhalten wiederherstellen kann?
Ich benutze typed datasets, vielleicht kann man den TableManager ja auch etwas klüger machen, so dass er in der richtigen Reihenfolge einfügt??


Gruß -Hades-
private Nachricht | Beiträge des Benutzers
f_igy
myCSharp.de - Member



Dabei seit:
Beiträge: 115

beantworten | zitieren | melden

Hi,

könnte daran liegen, dass Du die beiden Inserts seit gestern in unterschiedlichen Transaktionen durchzuführen versuchst. Innnerhalb einer Transaktion sieht man auch nicht committete Daten, die außerhalb der Transaktion nicht zu sehen sind.

Wie man das im TableManager steuert habe ich aber keine Ahnung. Wenn Du den Code von gersten noch hast kannst Du ja mal ein diff machen und nach Transaktion oder dergl. suchen...

Gruß
f_igy
private Nachricht | Beiträge des Benutzers
f_igy
myCSharp.de - Member



Dabei seit:
Beiträge: 115

beantworten | zitieren | melden

Achja,

vielleicht hilft das ja?

How to: Set the Order When Performing a Hierarchical Update
How to: Set the Order When Performing a Hierarchical Update

Gruß
f_igy
private Nachricht | Beiträge des Benutzers
-Hades-
myCSharp.de - Member



Dabei seit:
Beiträge: 171
Herkunft: Deutschland NRW

Themenstarter:

beantworten | zitieren | melden

Hallo,

es sind keine unterschiedlichen Transaktionen. Ich füge völlig neue Datensätze ein. Ich habe auch nicht das Datenbankschema verändert.
Das mit dem TableManager habe ich schon ausprobiert. Er macht zunäcst Inserts, allerdings funktioniert das auch nicht, da er wohl erst die "falschen" Zeilen inserten will, die aber den Fremdschlüssel (den es noch nicht gibt) beinhalten...
private Nachricht | Beiträge des Benutzers
f_igy
myCSharp.de - Member



Dabei seit:
Beiträge: 115

beantworten | zitieren | melden

Ach,

dann schau doch mal hier:

Walkthrough: Saving Data from Related Data Tables (Hierarchical Update)

Ich hab's beim Überfliegen zwar nicht verstanden, aber vielleicht hilft es Dir. Alles in allem bin ich mir nicht so sicher, ob es für die Interaktion mit Datenbanken immer so hilfreich ist Table-Adapter oder EFs zu verwenden. Die versprechen zwar alles einfacher zu machen, bereiten aber auch oft Kopfzerbrechen...

Gruß
f_igy

Moderationshinweis von gfoidl (03.09.2013 - 18:09)

Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 3.1.

private Nachricht | Beiträge des Benutzers
-Hades-
myCSharp.de - Member



Dabei seit:
Beiträge: 171
Herkunft: Deutschland NRW

Themenstarter:

beantworten | zitieren | melden

Hallo f_igy,

danke für den Link. Demzufolge müsste mein TableAdapterManager, den ich für die Updates nutze, ja schon das hierarchische Einfügen beherrschen. Allerdings bekomme ich trotzdem die exception (neuerdings).

Also was ich ganz konkret habe und mache:

Ich habe simpel ausgedrückt die Tabelle Partner mit einem selbst erstelllten Guid Primärschlüssel. Daneben eine Tabelle Adresse, die die Partner-Guid als Fremdschlüssel enthält. Ich erzeuge mit einem typisierten Dataset erst den Partner, erzeuge die guid, erzeuge dann eine Adresse, setze die fremdschlüssel guid vom Partner und möchte diese beiden Zeilen dann mit Hilfe des TableAdapterManager committen. Da kommt dann die Exception.

Vorher war es sogar so, dass ich erst die Adresse committen konnte, ohne den Partner mit hochzuladen, ich habe also nur die mir bekannte Guid als Fremdschlüssel gesetzt und MySql hat nicht gemeckert, also auch nicht wenn die Guid auf die verwiesen wird gar nicht existiert.
Darauf aufbauend habe ich meinen Code erstellt, und da müsste ch jetzt wirklich eine große Menge von abändern wenn das so jetzt nicht mehr funktioniert...
private Nachricht | Beiträge des Benutzers
vbprogger
myCSharp.de - Experte

Avatar #avatar-1820.gif


Dabei seit:
Beiträge: 1.696
Herkunft: NRW/DE

beantworten | zitieren | melden

Hallo Hades,

kann es sein dass du den CONSTRAINT nachträglich erstellt hast, denn sonst läßt sich das Phänomen für mich schwer nachvollziehbar.

Grüße
Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.
---------
Bemerkung: ich beantworte keine Fragen via PM, denn das Forum soll ja was davon haben!
private Nachricht | Beiträge des Benutzers