Sto importando tabelle da un database Oracle, utilizzando un dataAdapter VB.NET. Io uso il comando "fill" per aggiungere i dati importati a un DataSet. Come è possibile definire una colonna specifica di un DataTable come PrimaryKey, dopo che DataTable è già pieno di dati?Come definire una colonna DataBase VB.NET come chiave primaria dopo la creazione
risposta
È 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");
Finché i valori nella colonna sono unici
table.PrimaryKey = new DataColumn[] { table.Columns["Id"] };
regolare per i vostri nomi di colonna.
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
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