2008-11-13 4 views
4

Tenir compte d'une table SQL Server contenant:ADO.NET: Ajout de DataRelation à un DataSet; qui est parent et qui est enfant?

ID ParentID Text 
=== ========= ============= 
1 (null)  Product 
2 (null)  Applications 
3 1   Background 
4 1   Details 
5 2   Mobile 

i remplir un SqlDataSet avec la table, et maintenant je veux ajouter la relation parent-enfant à l'DataSet:

public DataRelation(
    string relationName, 
    DataColumn parentColumn, 
    DataColumn childColumn, 
    bool createConstraints 
) 

Maintenant this guy utilise:

DataRelation relation = newDataRelation("ParentChild", 
    ds.Tables[0].Columns["ID"], //parentColumn 
    ds.Tables[0].Columns["ParentID"] //childColumn, 
    true //createConstraints 
); 

Mais quand je fais ce que je reçois l'exception:

This constraint cannot be enabled 
as not all values have corresponding parent values. 

Les gens ont suggéré de passer faux pour createConstraints; mais alors pourquoi ça marche pour lui?

Et qu'est-ce qu'un enfant et qu'est-ce qu'un parent de toute façon? j'aurais pensé la colonne enfant est la colonne qui doit pointer à un parent et colonne parent est la chose qui fait le pointage, ce qui inverse la relation:

DataRelation relation = newDataRelation("ParentChild", 
    ds.Tables[0].Columns["ParentID"], //parentColumn 
    ds.Tables[0].Columns["ID"], //childColumn 
    true //createConstraints 
); 

Alors, qui est-il? Pourquoi son travail? Qu'est-ce qui est à l'exception? Pourquoi peut-il créer la contrainte quand il a des zéros?

Dieu, il fait chaud ici.

Répondre

3

Wow n'avait la bonne réponse ....

Le problème est que l'exemple que vous lisez est sous l'étiquette « Étape 3 - Récupération de données et créer relations emboîtées ».

Si vous souhaitez ajouter une relation entre deux colonnes de la même TABLE (imbriquée), vous devez définir la variable 'Nested' sur true (avant de l'ajouter) comme indiqué sur son site Web.

relation.Nested = true; 
ds.Relations.Add(relation); 
+1

C'est exactement ce que je devais savoir - MSDN ne me donner une réponse claire , comme d'habitude. Tyvm! –

1

la relation parent-enfant est également appelé un à plusieurs, où le « un » est le parent et le « beaucoup » est l'enfant

l'enfant a une colonne qui détient la clé de la colonne parent (alias la colonne "clé étrangère")

dans votre exemple, elle n'a probablement pas de valeur null pour l'ID parent; passer false pour éviter les contraintes d'activation fera probablement disparaître l'erreur

0

Une des raisons pour lesquelles ses travaux pourraient être parce que toutes les lignes dans le jeu de résultats pourraient avoir un parentID. La colonne enfant est celle qui fait référence et la colonne parent est celle qui est référencée par la colonne enfant. En d'autres termes, l'enfant renvoie le parent. Donc, dans votre cas, Id est la colonne parente et parentId est la colonne enfant.

0

Essayez d'inverser les paramètres de votre relation.

Questions connexes