Как определить столбец VB.NET DataTable в качестве первичного ключа после создания - PullRequest
7 голосов
/ 18 марта 2010

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

Ответы [ 4 ]

10 голосов
/ 18 марта 2010

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

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

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

9 голосов
/ 10 июня 2014

Вот одна строка в VB (вопрос был с "использованием VB.NET"). Этот пример с индексированными 2 столбцами:

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

Обновление: А вот еще одна строчка о том, как использовать этот индекс из 2 столбцов для поиска строки:

table.Rows.Find(New Object() {value1, value2}) '<- DataRow returned
5 голосов
/ 18 марта 2010

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

    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 # и у меня есть пара методов Extension, которые я использую для «уборки» звонков, которые мне нужно сделать, которые вы можете рассмотреть для перевода на 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");
1 голос
/ 20 октября 2014

Спасибо за ответ, Роб - есть небольшая проблема с версией 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
...