Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - Datensätze in einer Untertabelle löschen


Doug123 - Di 19.02.08 15:31
Titel: Datensätze in einer Untertabelle löschen
Guten Tag!

Ich habe zwei Tabellen "Autos" und "Ersatzteile" in einem DataSet und habe zwischen diesen beiden auch eine Relation hergestellt. Das Anlegen der Autos und der Ersatzteile klappt auch soweit z.B. mittels "DataAdapter.Update(ds, "Autos");". Nun möchte ich aber, dass wenn ich ein "Auto" lösche, alle dahinterliegenden "Ersatzteile" zu diesem Auto gelöscht werden. Wie lässt sich sowas denn realisieren?

Gruß
Doug


Kha - Di 19.02.08 16:06

Schau dir die DataRelation-Klasse einmal genauer an, besonders die ChildKeyConstraint-Eigenschaft. Wenn du das DataSet im Designer erstellt hast, kannst du auch einfach dort die Relation auswählen, auf "Edit Relation..." klicken und dort dann die Einschränkung einstellen (in diesem Fall: "Delete Rule: Cascade").


Doug123 - Di 19.02.08 17:14

Hallo! Erstmal danke für deine Antwort!

Bei mir will es bis jetzt einfach nicht klappen. Mein bisheriger Code sieht so aus:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
daAutos.Fill(ds, "Autos");
daAutos.MissingSchemaAction = MissingSchemaAction.AddWithKey;

daErsatz.Fill(ds, "Ersatzteile");
daErsatz.MissingSchemaAction = MissingSchemaAction.AddWithKey;

DataRelation relation = new DataRelation("AutosErsatzteile", ds.Tables["Autos"].Columns["Guid"], ds.Tables["Ersatzteile"].Columns["Auto_Guid"]);
ds.Relations.Add(relation);

ForeignKeyConstraint foreignKey = relation.ChildKeyConstraint;
foreignKey.DeleteRule = Rule.Cascade;
foreignKey.UpdateRule = Rule.None;
foreignKey.AcceptRejectRule = AccecptRejectRule.Cascade;


Das DataSet habe ich nämlich nicht über den Designer erstellt. Die Commands für die zwei DataAdapter habe ich auch erstellt. Lösche ich ein Auto, bleiben die Ersatzteile weiterhin vorhanden.

Gruß
Doug