Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

DataColumn




Тип DataColumn представляет один столбец в объекте DataTable. Вообще-то множество всех объектов DataColumn, содержащихся в данном объекте DataTable, содержит всю информацию схемы таблицы. Например, если понадобится создать копию таблицы Inventory из базы данных AutoLot, нужно будет создать четыре объекта DataColumn, по одному для каждого столбца (CarID, Make, Color и PetName). После создания объектов DataColumn они обычно добавляются в коллекцию столбцов типа DataTable (с помощью свойства Columns).

Возможно, вы уже знаете, что любому столбцу в таблице базы данных можно назначить набор ограничений (в виде первичного ключа, значения по умолчанию, разрешения только на чтение информации и т.д.). Кроме того, каждый столбец таблицы должен относиться к одному из разрешенных в СУБД типов данных. К примеру, схема таблицы Inventory требует, чтобы столбец CarID содержал целые числа, а столбцы Make, Color и PetName — массив символов. Класс DataColumn имеет ряд свойств для указания таких моментов:

AllowDBNull Указывает, может ли данный столбец содержать пустые значения. По умолчанию содержит значение true
AutoIncrement, AutoIncrementSeed, AutoIncrementStep Применяются для настройки поведения автоинкремента для данного столбца. Это может оказаться удобным, если нужно обеспечить уникальность значений в этом DataColumn (например, если он содержит первичные ключи). По умолчанию DataColumn не поддерживает автоинкрементное поведение
Caption Задает или получает заголовок, который должен отображаться для данного столбца. Это позволяет определить более наглядные варианты для имен столбцов в базе данных
ColumnMapping Определяет представление DataColumn при сохранении DataSet в виде XML-документа с помощью метода DataSet.WriteXml(). Можно указать, что столбец данных должен быть записан как XML-элемент, XML-атрибут, простое текстовое содержимое, либо его следует полностью проигнорировать
ColumnName Задает или получает имя столбца из коллекции Columns (т.е его внутреннее представление в DataTable). Если не занести значение в ColumnName явно, то по умолчанию там находится слово "Column" с числовыми суффиксами по формуле n+1 (т.е. Column1, Column2, Column3 и т.д.)
DataType Определяет тип данных (логический, строковый, с плавающей точкой и т.д.), хранящихся в данном столбце
DefaultValue Задает или получает значение по умолчанию, заносимое в данный столбец при вставке новых строк
Expression Задает или получает выражение для фильтрации строк, вычисления значения столбца или создания агрегированного столбца
Ordinal Задает или получает числовое положение столбца в коллекции Columns, содержащейся в DataTable
Readonly Определяет, предназначен ли данный столбец только для чтения после добавления строки в таблицу. По умолчанию равно false
Table Получает объект DataTable, содержащий данный DataColumn
Unique Задает или получает значение, указывающее, должны ли быть уникальными значения во всех строках данного столбца, или допустимы совпадения. При присвоении столбцу ограничения первичного ключа свойство Unique должно содержать значение true

Продолжаем создание проекта SimpleDataSet (и демонстрацию применения типа DataColumn). Предположим, что вам нужно смоделировать столбцы таблицы Inventory. Поскольку столбец CarID должен быть первичным ключом таблицы, его необходимо создать только для чтения, содержащим уникальные значения и не допускающим пустые значения (с помощью свойств Readonly, Unique и AllowDBNull). Вставьте в класс Program новый метод FillDataSet(), предназначенный для создания четырех объектов DataColumn. Он принимает в качестве единственного параметра объект DataSet:

static void FillDataSet(DataSet ds){ DataColumn carIDColumn = new DataColumn("CarID", typeof(int)); carIDColumn.Caption = "Car ID"; carIDColumn.ReadOnly = true; carIDColumn.AllowDBNull = false; carIDColumn.Unique = true; DataColumn carMakeColumn = new DataColumn("Make", typeof(string)); DataColumn carColorColumn = new DataColumn("Color", typeof(string)); DataColumn carPetName = new DataColumn("PetName", typeof(string)); carPetName.Caption = "Дружественное имя";}

Обратите внимание, что при конфигурировании объекта carIDColumn было присвоено значение свойству Caption. Это позволяет определить строковое значение для отображения при выводе данных, которое может отличаться от имени столбца (имена столбцов в таблицах баз данных обычно более удобны для программирования (например, au_fname), чем для отображения (например, Author First Name)). По той же причине здесь задано заглавие столбца PetName, т.к. название столбца "Дружественное имя" понятнее конечному пользователю, чем PetName.

Одним из аспектов DataColumn, допускающим настройку, является возможность автоинкремента (autoincrement). Если в какую-либо таблицу добавляется новая строка, то значение автоинкрементного поля устанавливается автоматически, на основании предыдущего значения и шага автоинкремента. Это удобно, когда нужно, чтобы в каком-либо столбце не было повторяющихся значений (обычно это первичный ключ).

Такое поведение регулируется свойствами Autoincrement, AutoIncrementSeed и AutoIncrementStep. Значение AutoIncrementSeed используется для задания начального значения в столбце, AutoIncrementStep — для задания числа, которое прибавляется для каждого последующего значения. Рассмотрим следующую модификацию создания carIDColumn:

static void FillDataSet(DataSet ds){ DataColumn carIDColumn = new DataColumn("CarID", typeof(int)); carIDColumn.Caption = "Car ID"; carIDColumn.ReadOnly = true; carIDColumn.AllowDBNull = false; carIDColumn.Unique = true; carIDColumn.AutoIncrement = true; carIDColumn.AutoIncrementSeed = 0; carIDColumn.AutoIncrementStep = 1;...

Здесь объект carIDColumn настроен так, что при добавлении новых строк его значения увеличиваются на 1. Поскольку первоначальное значение задано равным 0, в столбце будут содержаться числа 0, 1, 2, 3 и т.д.

Обычно тип DataColumn не применяется обособленно, а вставляется в нужный объект DataTable. Для демонстрации создайте новый объект DataTable и вставьте каждый объект DataColumn в коллекцию столбцов с помощью свойства Columns:

// Добавление объектов DataColumn в DataTableDataTable inventoryTable = new DataTable("Inventory");inventoryTable.Columns.AddRange(new DataColumn[] { carIDColumn, carMakeColumn, carColorColumn, carPetName });

Теперь объект DataTable содержит четыре объекта DataColumn, которые представляют схему находящейся в памяти таблицы Inventory. Но пока эта таблица еще не содержит данных и не входит в коллекцию таблиц, принадлежащих конкретному DataSet. Мы сделаем и то, и то, а начнем с заполнения таблицы данными с помощью объектов DataRow.




Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 536; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.