dt.PrimaryKey = new DataColumn[]{col1};
_I
Пример. Первичный ключ состоит из более чем одного столбца: //---создание таблицы
DataTable dt = new DataTable("SostavOtdela"); //---создание столбцов
DataColumn colO = new DataColumn("Otdel", typeof(System.String)); DataColumn coll = new DataColumn("FIO", typeof(System.String)); DataColumn col2 = new DataColumn("Dolgnost", typeof(System.String));
//---добавляем столбцы к таблице
dt.Columns.Add(colO); dt.Columns.Add(coll);
dt.Columns.Add(col2);
//---задаем первичный ключ для таблицы
dt.PrimaryKey = new DataColumn[]{col0, coll};
_I
Вообще говоря, столбцы, входящие в состав первичного ключа, должны быть уникальными, т. е. иметь установленным в значение true свойство
public bool Unique {get; set;}
и не позволять хранить пустые значение, т. е. свойство такого столбца
public bool AllowDBNull {get; set;} должно содержать false.
На практике в этом нет необходимости: как только столбец включается в состав первичного ключа, его свойства Unique и AllowDBNull автоматически получат значения true и false соответственно. В этом нетрудно убедиться из следующего примера.
Пример. Создадим таблицу из двух столбцов FIO (фамилия) и Dolgnost (должность). Первичный ключ построим по столбцу FIO. Добавим три записи: //---создание таблицы
DataTable dt = new DataTable("SostavOtdela"); //---создание столбцов
DataColumn coll = new DataColumn("FIO", typeof(System.String));
DataColumn col2 = new DataColumn("Dolgnost", typeof(System.String));
//---добавляем столбцы к таблице
dt.Columns.Add(coll); dt.Columns.Add(col2);
//---задаем первичный ключ для таблицы
dt.PrimaryKey = new DataColumn[]{col1};
//---добавляем записи в таблицу
DataRow rl = dt.NewRow(); DataRow r2 = dt.NewRow(); DataRow r3 = dt.NewRow(); r1["FIO"] = "Иванов"; r1["Dolgnost"] = "инженер"; r2["FIO"] = "Петров";
r2["Dolgnost"] = " зав.лаб.";
r3["FIO"] = "Сидоров";
r3["Dolgnost"] = " аспирант";
dt.Rows.Add(rl); dt.Rows.Add(r2); dt.Rows.Add(r3);
Попробуем теперь добавить в таблицу еще одного Иванова:
DataRow r4 = dt.NewRow(); r4["FIO"] = "Иванов"; r4["Dolgnost"] = "нач. отдела"; dt.Rows.Add(r4);
и сразу получим исключение по нарушению уникальности значений первичного ключа таблицы.
3.4.10. Добавление ограничений уникального столбца
Для любого столбца таблицы данных, допускающего только уникальные значения, в коллекции Constraints таблицы
public ConstraintCollection Constraints {get;}
должно задаваться ограничение уникального столбца - объект класса System.Da-ta.UniqueConstraint.
Для столбцов первичного ключа это ограничение создается автоматически (одно на все столбцы, входящие в состав первичного ключа таблицы).
Для прочих "уникальных" столбцов таблицы, не входящих в состав первичного ключа ограничение UniqueConstraint следует создать вручную при помощи одной из следующих разновидностей конструктора: