2010-03-18 5 views

Répondre

5

Vous pouvez définir la clé primaire d'une table par:

Dim table As New DataTable() 

    table.Columns.Add(New DataColumn("MyColumn")) 

    Dim primaryKey(1) As DataColumn 
    primaryKey(1) = table.Columns("MyColumn") 
    table.PrimaryKey = primaryKey 

Pour pouvoir utiliser la clé primaire, vous devez vous assurer que toutes les valeurs de la colonne donnée sont uniques.

Je travaille principalement en C# et ont deux méthodes d'extension que j'utilise pour « ranger » les appels que je dois faire, que vous voudrez peut-être envisager de traduire à VB et en utilisant:

public static void SetPrimaryKey(this DataTable value, string columnName) 
    { 
     value.PrimaryKey = new DataColumn[] { value.Columns[columnName] }; 
    } 

    public static DataRow FindByPrimaryKey(this DataTable value, object key) 
    { 
     return value.Rows.Find(key); 
    } 

    // I can then do: 

    DataTable table = CallToRoutineThatGetsMyDataTable(); 
    table.SetPrimaryKey("PKColumnName"); 
    DataRow result = table.FindByPrimaryKey("valueToFindWith"); 
9

Tant que les valeurs de la colonne sont uniques

table.PrimaryKey = new DataColumn[] { table.Columns["Id"] }; 

pour régler vos noms de colonnes.

9

Voici un one-liner dans VB (la question était avec "using VB.NET"). Cet exemple est avec 2 colonnes indexées:

table.PrimaryKey = New DataColumn() {table.Columns("column1"), _ 
            table.Columns("column2")} 

Mise à jour: Et voici une autre en une ligne sur la façon d'utiliser cet index 2 colonnes pour trouver une ligne:

table.Rows.Find(New Object() {value1, value2}) '<- DataRow returned 
1

Merci pour la réponse Rob - il y a un léger problème avec la version vb bien que l'indice devrait être basé sur zéro:

Dim table As New DataTable() 

table.Columns.Add(New DataColumn("MyColumn")) 

Dim primaryKey(1) As DataColumn 
primaryKey(0) = table.Columns("MyColumn") 
table.PrimaryKey = primaryKey 
Questions connexes