Я импортирую таблицы из базы данных Oracle с помощью адаптера данных VB.NET. Я использую команду «fill» для добавления импортированных данных в DataSet. Как можно определить конкретный столбец DataTable как PrimaryKey, после того, как DataTable уже заполнен данными?Как определить столбцы DataTable VB.NET в качестве первичного ключа после создания
ответ
Вы можете установить первичный ключ таблицы по:
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");
Пока значения в столбце являются уникальными
table.PrimaryKey = new DataColumn[] { table.Columns["Id"] };
настроить для имен столбцов.
Вот однострочный в 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
Спасибо за ответ 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