Читайте также:
|
|
CaseSensitive – Указывает, чувствительны ли к регистру символов строковые сравнения в таблице. По умолчанию равно false
ChildRelations – Возвращает коллекцию дочерних отношений для данного DataTable (если они есть).
Constraints – Получ коллекцию ограничений, поддерживаемых данной таблицей
Сору() – Метод, копирующий схему и дату DataTable в новый экземпляр
DataSet – Получает DataSet, содержащий данную таблицу (если он есть)
DefaultView – Получает специализированное представление таблицы, к-ое может
содержать отфильтрованное представление или позицию курсора.
ParentRelations – Получ коллекцию родит-ких отношений для данного DataTable
PrimaгуКеу – Получ или задает массив столбцов, которые выступают в качестве первичных ключей для таблицы данных.
RemotingFormat – Позволяет определить формат сериализации объектом DataSet его содержимого (двоичный или XML) для уровня NET Remoting
TableName – Получ или задает имя таблицы. Значение этого свойства можно так же задать через параметр конструктора
Установим свойство PrimareKey (первичный ключ для таблицы) столбцу cod:
Console.WriteLine("Установка первичного ключа для таблицы:");
Turistes.PrimaryKey = new DataColumn[] { Turistes.Columns[0] };
Наш объект DataTable Turistes создан. Осталось вставить его в объект DataSet с помощью коллекции Tables: MyDS.Tables.Add(Turistes);
Выведем содержимое объекта DataSet на экран:
Console.WriteLine("Данные DataSet:");
Console.WriteLine("Таблицы в DataSet:" + MyDS.DataSetName);
//Вывод имени DataSet и расширенных свойств:
foreach (System.Collections.DictionaryEntry de in MyDS.ExtendedProperties)
Console.WriteLine("Ключ " + de.Key + ", значение " + de.Value);
Console.WriteLine();
//Вывод каждой таблицы:ъ
foreach (DataTable dt in MyDS.Tables)
{
Console.WriteLine("Таблица:" + dt.TableName);
//Вывод имен столбцов:
for (int curCol = 0; curCol < dt.Columns.Count; curCol++) Console.Write(dt.Columns[curCol].ColumnName.Trim() + "\t");
Console.WriteLine("\n----------------------------------------");
//Вывод содержимого DataTable:
for (int curRow = 0; curRow < dt.Rows.Count; curRow++)
{
for (int curCol = 0; curCol < dt.Columns.Count; curCol++) Console.Write(dt.Rows[curRow][curCol].ToString() + "\t");
Console.WriteLine();
}
}
Тип DataTable поддерживает также метод CreateDataReader(). Этот метод позволяет получить данные DataTable, используя схему, соответствующую схеме навигации объекта чтения Datareader (только вперед и только для чтения):
DataTableReader dtReader=Turisres.CreateDataReader();
while (dtReader.Read())
{
for (int i=0; i<rdReader.FieldCount; i++)
Console.WriteLine(“dtReader.GetName(i) +” “+ dtReader.GetValue(i).ToString());
Console.WriteLine();
}
dtReader.Close();
DataTableReader работает аналогично объекту чтения поставщика данных. Его можно использовать, когда нужно прочесть данные DataTable без просмотра внутренних коллекций строк и столбцов.
23. Связи между таблицами: объект DataRelation
Всямощьавтономного уровня проявляется тогда, когда объект DataSet содержит несколько взаимосвязанных объектов DataTable. М-ду таблицами могут быть связи. Они представлены объектом DataRelation. В коллекцию данного DataSet можно вставить любое кол-во объектов DataRelation, к-ые описывают все взаимосвязи таблиц. Эти объекты позволяют клиентскому уровню выполнять навигацию м-ду данными таблицам без обращения к сети.
Наконец, в таблицах есть первичные и вторичные ключи – объект Constraint со своими двумя подклассами UniqueConstraint и ForeighKeyConstraint описывают их. Отметим, объекты программы и соотв-щие объекты БД-ых не эквивалентны.
В классе DataSet определяется свойство Relations – набор объектов – представителей класса DataRelations. Каждый такой объект определяет связи между составляющими объект DataSet объектами DataTable (таблицами). Если в DataSet более одного набора DataTable, набор DataRelations будет содержать несколько объектов типа DataRelation. Каждый объект определяет связи между таблицами DataTable. Таким образом, в объекте DataSet реализуется полный набор элементов для управления данными, включая сами таблицы, ограничения и отношения между таблицами.
(Работу со связанными таблицами БД BDTur_firma см. Лабораторная работа5_3.doc!!!)
DataRelation dr1 = new DataRelation("Turisti", ds.Tables["Туристы"].Columns["[Код туриста]"], ds.Tables["Информация о туристах"].Columns["[Код туриста]"]);
ds.Relations.Add(dr1);
DataRelation dr2 = new DataRelation("Putewki", ds.Tables["Информация о туристах"].Columns["[Код туриста]"], ds.Tables["Путевки"].Columns["[Код туриста]"]);
ds.Relations.Add(dr2);
DataRelation dr3 = new DataRelation("Oplati", ds.Tables["Путевки"].Columns["[Код путевки]"], ds.Tables["Оплаты"].Columns["[Код путевки]"]);
ds.Relations.Add(dr3);
DataRelation dr4 = new DataRelation("Sezoni", ds.Tables["Сезоны"].Columns["[Код сезона]"], ds.Tables["Путевки"].Columns["[Код сезона]"]);
ds.Relations.Add(dr4);
DataRelation dr5 = new DataRelation("Turi", ds.Tables["Туры"].Columns["[Код тура]"], ds.Tables["Сезоны"].Columns["[Код тура]"]);
ds.Relations.Add(dr5);
В загруженных таблицах не формируются автоматически все нужные объекты, в некоторых случаях необходимо сделать это самостоятельно. Сами объекты имеют также довольно тонкую и сложную структуру, поэтому это было бы довольно грубым приближением. Однако, на первых порах, для понимания сути полезно помнить следующие соотношения:
DataSet = <одна или несколько таблиц> = <один или несколько объектов DataTable>.
DataTable = <таблица>.
DataTable = <таблица> = <множество полей, столбцов, колонок> =
= <множество объектов DataColumn>.
DataTable = <таблица> = <множество строк> = <множество объектов DataRow>.
DataColumn = <столбец, поле, колонка>.
DataRow = <строка>.
DataRelation = <связь между таблицами>.
Возникает вопрос: для чего нужны эти объекты, если можно обходится и без них для вывода содержимого таблицы, например в элемент DataGridView? Дело в том, что для простого отображения информации создавать эти объекты не требуется, но в этом случае все данные будут однородными текстовыми переменными, подобно таблицам в документе Microsoft Word. DataSet не может сам сформировать структуру данных – тип переменных, первичные и вторичные ключи, связи между таблицами. Для управления такой структурой, для ее адекватного отображения (например, вывод информации с привязкой к элементам, создаваемым в режиме работы приложения) и нужно определение этих объектов.
Дата добавления: 2015-09-10; просмотров: 21 | Поможем написать вашу работу | Нарушение авторских прав |