4 Stimmen

Ist es möglich, eine DataRelation zum DataSet hinzuzufügen, wenn die Kindertabelle Zeilen enthält, die keinen Elternteil in der Elterntabelle enthalten, in C# / ADO.NET 2.0

Wenn ich den DataSet mit DataAdapters fülle, die alle Zeilen aus Aufträgen 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 Sie DataRelation.
    DataRelation relCustOrder;
    relCustOrder = new DataRelation("CustomersOrders", 
        parentColumn, childColumn);
    // Fügen Sie die Beziehung dem 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 Aufträge gibt, die keine Kunden haben. Dies kann passieren, wenn ein fehlerhaftes Programm Kundenaufträge nicht gelöscht hat, als der Kunde gelöscht wurde.

Was kann ich tun, außer der Bestellungen-SELECT-Zeichenfolge 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 auch 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

8voto

David Fox Punkte 10382

Es gibt eine Überlastung der Add()-Methode, die einen bool-Wert enthält, um Einschränkungen durchzusetzen oder nicht. Ich denke, ich habe es in der Vergangenheit so verwendet:

DataRelation dr = ds.Relations.Add("Name", DataColumnParent, DataColumnChild, false);

BEARBEITEN

Entschuldigung, die einzige Überlastung ist in dieser Methodensignatur: http://msdn.microsoft.com/en-us/library/3zy636kc.aspx

DataRelationCollection.Add(String, DataColumn[], DataColumn[], bool)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X