Toon posts:

[.NET 1.1 C#] System Exception "Cannot clear table..."

Pagina: 1
Acties:

Verwijderd

Topicstarter
Bij het werken met een dataSet in C# / .NET 1.1 krijg ik telkens de volgende System Exception:
"Cannot clear table tableParent because ForeignKeyConstraint Relatie enforces constraints and there are child rows in tableChilds."

Wat ik probeer is de twee gerelateerde tabellen tableParent en tableChilds te legen met de methode .Clear():
tableParent.Clear();
tableChilds.Clear();
Hier ontstaat de Exception.

Eerst dacht ik: ik draai de volgorde om:
tableChilds.Clear();
tableParent.Clear();
Want als de Childs leeg is dan zijn er geen gerelateerde records en kun je wissen. Dat gaat niet. Weer dezelfde Exception. Dat snap ik niet, want de tabel tableChilds is toch leeg? Vanwaar die child Rows?

Dan besluit ik eerst die hele relatie te wissen:
dataset.Relations.Clear();
drRelatie = null;
tableChilds.Clear();
tableParent.Clear();
Weer die Exception. Dat snap ik nog minder, want de relatie heb ik gewist! En toch enforcet die nog een contraint?

Als ik vervolgens nog eerst de regel
dataset.EnforceConstraints = false;
toevoeg, dan werkt de code wel. Maar dit voelt aan als een work-around. Het lijkt me niet netjes.

Wat begrijp ik nu niet goed en weet iemand een nette oplossing voor het run-time leegmaken van tabellen?

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:12
Uit de MSDN:
All rows in all tables are removed. An exception is generated if the table has any enforced child relations that would cause child rows to be stranded.
Het feit dat je die relatie hebt, zorgt er dus voor dat die Exceptie gegenereerd wordt.
In je voorbeeldje waar je zegt dat je de relatie wist, wis je de relatie niet.

Wat je kan doen, is over iedere DataRow loopen, en de Delete method aanroepen...

Of toch maar gebruik maken van de EnforceConstraints property. Deze op false zetten, alles wissen, en daarna deze terug op True zetten. Indien je op dat moment niet voldoet aan de constraints die je gedefinieerd hebt, zal je alsnog een exception krijgen.

[ Voor 23% gewijzigd door whoami op 30-10-2006 09:56 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op maandag 30 oktober 2006 @ 09:55:
Uit de MSDN:

[...]
In je voorbeeldje waar je zegt dat je de relatie wist, wis je de relatie niet.
Dus blijkbaar is het zo dat als je het DataRelation object wist, de relatie zelf in stand blijft?
Het lijkt er wel op want er bestaat ook een Constraints property in de dataTable. Blijkbaar blijven de Constraints bestaan ook al is de oorspronkelijke DataRelation gewist.

Ik ga hier verder mee prutsen programmeren.

Verwijderd

Topicstarter
UPDATE:
Het programma werkt nu. Tabellen worden on-the-fly gekoppeld, ontkoppeld, gevuld en weer gewist.

Bedankt whoami voor je hulp.