2010-03-18 10 views

risposta

5

È possibile impostare la chiave primaria di una tabella:

Dim table As New DataTable() 

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

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

Per essere in grado di utilizzare la chiave primaria, è necessario assicurarsi che tutti i valori per la colonna presentata sono unici.

Io lavoro principalmente in C# e hanno un paio di metodi di estensione che uso per "mettere ordine" le chiamate ho bisogno di fare, che si potrebbe prendere in considerazione la traduzione di VB e l'utilizzo di:

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

Finché i valori nella colonna sono unici

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

regolare per i vostri nomi di colonna.

9

Ecco un one-liner in VB (la domanda era con "using VB.NET"). Questo esempio è con 2 colonne indicizzate:

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

Aggiornamento: Ed ecco un altro one-liner su come utilizzare questo indice 2 colonne di trovare una riga:

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

Grazie per la risposta Rob - C'è un leggero problema con la versione VB anche se l'indice dovrebbe essere a base zero:

Dim table As New DataTable() 

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

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