2008-12-11 7 views
3

J'ai un petit jeu de données avec quelques données. Je charge les données à partir de divers DB et ai un fichier de configuration que j'ai lu pour déterminer les clés primaires que je veux appliquer sur les datatables donnés. Si la configuration ne contient pas de clé primaire appropriée (non unique), comment puis-je attraper cet événement lors de l'application de la clé primaire à la datatable? À l'heure actuelle, il semble que cela me permet d'appliquer la clé primaire, même si ce n'est pas unique .....net Jeu de clés primaires - Mise en application de l'unicité?

 DataTable dtbl = ds.Tables[t.tblname]; 

     DataColumn[] pks = new DataColumn[t.Get_Key_Columns().Count]; 
     int i = 0; 
     foreach(DataColumn c in dtbl.Columns) 
     { 
      if(t.Get_Key_Columns().Exists(delegate(App_Column ac) 
        {return (ac.column_name == c.ColumnName);})) 
      { 
       pks[i] = c; 
       i++; 
      } 
     } 
     try 
     { 
      dtbl.PrimaryKey = pks; 
     } 
     catch etc....... 

Tout le monde pointe ce que je suis absent? Merci

Répondre

2

Pourquoi ne pas les ajouter en tant que contrainte?

dt.Constraints.Add("PKC", Columns, true) 

Si cela permet toujours les doublons, la propriété .HasErrors fournit-elle une indication?


Modifier des commentaires:

Ce qui, finalement, a travaillé pour OP était ce travail autour de: ajouter les contraintes avant remplir la table.

+0

try { UniqueConstraint uc = nouveau UniqueConstraint ("pk", pks, true); dtbl.Constraints.Add (uc); } J'ai vérifié HasErrors et son false après que chaque PK ait été appliqué. (J'ai coché les propriétés Dataset et DataTable) .... J'appelle même AcceptChanges() ... – WIDBA

+0

L'ensemble de données est rempli à partir de la source de données, puis j'applique les clés .. Y a-t-il une propriété sur l'ensemble de données pour les contraintes? – WIDBA

+0

pouvez-vous insérer un doublon * après * la clé primaire est appliquée? –

Questions connexes