A mellékelt példában a Northwind adatbázis négy tábláját használjuk fel, melyek adatállományai négy darab XML állományban vannak eltárolva a program mappájában. A program futásakor ezeket beolvassuk egy DataSet-be.
A Form-ra helyezett ComboBox-ban találjuk meg a Customers tábla minden olyan elemét, melyhez valamilyen rendelés tartozik az Orders táblában. Egy vevőt kiválasztva elérhetjük, hogy az összes rendeléséhez tartozó adat egy része megjelenjen a ListBox kontrolban úgy, hogy az adatokat a másik két táblából gyűjtjük össze.
Ezt minden alkalommal, amikor egy új vevőt választunk egy SQL-utasítással végezhetnénk el, ha a rendelés száma és dátuma, valamint a rajta szereplő termék neve és mennyisége érdekelne minket. Az SQL-utasítás a következő lehetne:
SELECT c.CustomerId, o.OrderId, o.OrderDate,
p.ProductName, od.Quantity
FROM Customers c, Orders o, Products p, [Order Details] od
WHERE c.CustomerId = o.CustomerId AND o.OrderId = od.OrderId AND od.OroductId = p.ProductId
Egyszerűbb azonban ha minden táblát betöltünk egy DataSet objektumba, és a köztük felépülő kapcsolatot egy DataRelation objektumban tároljuk. Ekkor elérhetjük, hogy a kulcsokon keresztül egymástól függő táblák ismerjék egymáshoz fűződő viszonyukat, így a keresés és lekérdezés egyszerűbbé válik.
A DataRelation objektumoknak a konstruktora kulcsfontosságú, mivel itt adjuk meg a kapcsolat alapjait jelentő oszlopokat.

DataRelation
Osztály: DataRelation
public DataRelation(
string relationName,
DataColumn parentColumn,
DataColumn childColumn
);
A táblák közötti összerendezés megvalósítása történik itt.
Paraméterek
string relationName
Kapcsolat neve.
DataColumn parentColumn
Szülőtábla kulcsoszlopa.
DataColumn childColumn
Gyermektábla idegenkulcs oszlopa.
Az adatok ilyen formátumú összerendezése biztosítja az integritást, és egyszerűsíti a kereséseket.
A program betöltődésekor megvalósítjuk az összerendezéseket, vagyis példányosítjuk a DataRelation osztályt. Elsőkét a Customers és az Orders táblákat.
co = new DataRelation("CustomerOrders",ds.Tables["Customers"].Columns["CustomerID"],ds.Tables["Orders"].Columns["CustomerID"]);
Majd az Orders és az OrderDetails táblákat.
ood = new DataRelation("OrderOrderDetails",ds.Tables["Orders"].Columns["OrderID"],ds.Tables["OrderDetails"].Columns["OrderID"], false);
Végül a Products és az Orders táblákat.
op = new DataRelation("OrderProducts",ds.Tables["Products"].Columns["ProductID"],ds.Tables["OrderDetails"].Columns["ProductID"]);
A műveletek végén a DataSet objektum Relations kollekciójában meg kell adni a fent létrehozott objektumokat.
ds.Relations.Add(co);
ds.Relations.Add(ood);
ds.Relations.Add(op);
Amennyiben választunk egy vevőt, a következő művelet hajtódik végre az adott vevő rendelésadatainak megjelenítéséhez:
Először a Customers tábla rekordjait vizsgáljuk meg, hogy az első oszlopának értéke mely esetekben azonos a ComboBox kontrolban kiválasztott vevőkóddal.
foreach (DataRow custdr in ds.Tables["Customers"].Rows)
{
if (custdr[0].ToString() == comboBox1.Text.ToString())
{
Amennyiben talált a kódhoz megfelelőt, akkor indulhat a rendelésadatok gyűjtése a létrehozott adatkapcsolat felhasználásával. Amennyiben a kiválasztott elemhez tartozó rekordokat talál a kód a listában, akkor a rendelések két adata kigyűjtésre kerül.
foreach (DataRow orderdr in custdr.GetChildRows(co))
{
listBox1.Items.Add("\tRendelés azonosító: " + orderdr["OrderID"]);
listBox1.Items.Add("\tRendelés dátuma: " + orderdr["OrderDate"].ToString().Substring(0,10));
A következő lépés a rendelés részleteinek vizsgálata a másik két adat összerendelés felhasználásával.
foreach (DataRow detaildr in orderdr.GetChildRows(ood))
{
listBox1.Items.Add("\t\tTerméknév: " + detaildr.GetParentRow(op)["ProductName"]);
listBox1.Items.Add("\t\tMennyiség: " + detaildr["Quantity"]);
}
}
}
Belátható, hogy elegendő a szükséges kulcs-idegenkulcs kapcsolatokkal tisztában lennünk, az adatok ilyetén összekapcsolása leveszi a vállunkról a bonyolult utasítások megfogalmazásának terhét. Az objektum képes a megszorítások nyilvántartására is, melynek elsősorban az adatintegritás szempontjából van jelentősége.