Wenn ich das DataSet mit DataAdaptern fülle, die alle Zeilen aus Bestellungen und Kunden auswählen und aufrufen:
private void CreateRelation()
{
// Holen Sie die DataColumn-Objekte aus zwei DataTable-Objekten
// in einem DataSet. Der Code zum Abrufen des DataSet wird hier nicht gezeigt.
DataColumn parentColumn =
DataSet1.Tables\["Customers"\].Columns\["CustID"\];
DataColumn childColumn =
DataSet1.Tables\["Orders"\].Columns\["CustID"\];
// Erstellen DataRelation.
DataRelation relCustOrder;
relCustOrder = new DataRelation("CustomersOrders",
parentColumn, childColumn);
// Fügen Sie die Beziehung zum DataSet hinzu.
DataSet1.Relations.Add(relCustOrder);
}
(von http://msdn.microsoft.com/en-us/library/system.data.datarelation.aspx)
Es wird einen Laufzeitfehler geben, wenn es Bestellungen gibt, die keine Kunden haben. Dies kann passieren, wenn ein fehlerhaftes Programm die Bestellungen des Kunden nicht gelöscht hat, als der Kunde gelöscht wurde.
Was kann ich tun, außer der Orders-Selektionszeichenfolge eine zusätzliche WHERE-Bedingung hinzuzufügen:
CUSTID IN (SELECT DISTINCT CUSTID FROM CUSTOMERS)
ODER: Ist es wirklich so (dass alle Kinder Eltern haben müssen)? Mein Code könnte ebenfalls einen Fehler haben. Die Ausnahme tritt auf, wenn IN MEINEM CODE die Beziehung zum gefüllten DataSet hinzugefügt wird. Die Ausnahme lautet:
Ein unbehandelter Ausnahmefehler des Typs 'System.ArgumentException' ist in System.Data.dll aufgetreten
Zusätzliche Informationen: Diese Einschränkung kann nicht aktiviert werden, da nicht alle Werte entsprechende Elternwerte haben.
Danke & Beste Grüße - Matti