2010-03-18 1 views
6

Я импортирую таблицы из базы данных Oracle с помощью адаптера данных VB.NET. Я использую команду «fill» для добавления импортированных данных в DataSet. Как можно определить конкретный столбец DataTable как PrimaryKey, после того, как DataTable уже заполнен данными?Как определить столбцы DataTable VB.NET в качестве первичного ключа после создания

ответ

5

Вы можете установить первичный ключ таблицы по:

Dim table As New DataTable() 

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

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

Чтобы иметь возможность использовать первичный ключ, вам необходимо убедиться, что все значения для данного столбца являются уникальными.

я в основном работаю в C# и есть несколько методов расширения я использую для «аккуратных» звонков мне нужно сделать, что вы, возможно, захотите рассмотреть вопрос о переводе на VB и использование:

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

Пока значения в столбце являются уникальными

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

настроить для имен столбцов.

9

Вот однострочный в VB (вопрос был «с использованием VB.NET»). Этот пример с 2-мя столбцами индексированных:

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

Update: А вот еще один вкладыш о том, как использовать этот индекс 2 колонки, чтобы найти строку:

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

Спасибо за ответ Rob - есть небольшая проблема с версией vb, хотя, поскольку индекс должен быть основан на нулевом значении:

Dim table As New DataTable() 

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

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