2010-03-18 59 views

Respuesta

5

Usted puede establecer la clave principal de una tabla por:

Dim table As New DataTable() 

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

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

Para poder utilizar la clave primaria, es necesario asegurarse de que todos los valores de la columna indicada son únicos.

I principalmente trabajar en C# y tener un par de métodos de extensión que utilizo para "ordenadas" las llamadas que tengo que hacer, que es posible que desee tener en cuenta que se traduce en VB y usando:

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

Mientras los valores de la columna son únicos

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

ajustar para sus nombres de columna.

9

Aquí está un trazador de líneas en VB (la pregunta era con "usar VB.NET"). Este ejemplo es con 2 columnas indexadas:

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

Actualización: Y aquí es otra de una sola línea sobre el uso de este índice 2 columnas para encontrar una fila:

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

Gracias por la respuesta Rob - hay un pequeño problema con la versión vb, ya que el índice debe estar basado en cero:

Dim table As New DataTable() 

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

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