Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
opi.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.81 Mб
Скачать

Робота з даними.

Тип DataTable

Клас DataTable використовується для створення в оперативній пам'яті моделей табличних наборів даних.

Основні властивості класу DataTable:

CaseSensitive – визначає, чи буде при порівнянні символьних даних у таблиці враховуватися регістр символів. За замовчуванням – false (не буде)

Child Relations – повертає колекцію підлеглих відношень ( DataRelatioriCoilertion ) для об'єкта DataTable (якщо такі є)

Columns – повертає набір стовпців для таблиці

Constraints – дозволяє отримати колекцію обмежень , визначених у таблиці ( ConstraintCollection )

DataSet – дозволяє отримати посилання на об'єкт DataSet, до якого належить дана таблиця (якщо такий об'єкт є)

DefaultView – Дозволяє отримати налаштоване представлення для таблиці, яке може включати в себе, наприклад, тільки деякі вибрані користувачем стовпчики чи дані про положення курсору

MinimumCapacity – дозволяє отримати або встановити вихіднe кількість рядків у таблиці (за замовчуванням використовується значення 25 )

ParentRelations – дозволяє отримати колекцію батьківських відношень для даного об'єкта DataTable

PrimaryKey – дозволяє отримати або встановити масив стовпців, які є первинним ключем в таблиці

Rows – повертає набір рядків , що відносяться до таблиці

TableName – дозволяє отримати ім'я таблиці або визначити його. Значення для цієї властивості може бути встановлено через конструктор таблиці.

Створимо об’єкт DataTable для збереження списку вузлів графа у базі даних:

DataTable dt = new DataTable("Node");

В таблиці потрібно створити 4 стовпця: NodeID, Name, X, Y.

Для реалізації стовпців таблиць використовуються об’єкти класу DataColumn.

Тип DataColumn

Тип DataColumn представляє окремий стовпець у таблиці (яка, в свою чергу, повинна бути представлена об'єктом DataTablе).

Основні властивості класу DataColumn:

AllowDbNull – використовується з метою визначення того, чи може стовпець містити значення NULL (порожні значення) За замовчуванням – може ( значення цієї властивості рівне true)

AutoIncrement, AutoIncrementSeed, AutoIncrementStep – ці властивості використовуються для налаштування автоматичного збільшення значень у стовпці. Це може бути корисно, якщо необхідно забезпечити унікальність значень в стовпці (наприклад, для первинного ключа). За замовчуванням автоматичний приріст значень у стовпцях відключено

Caption – визначає заголовок стовпця для відображення в призначеному для користувача додатку ( наприклад , цей заголовок може бути використаний в DataGrid )

ColumnMapping – визначає , як буде представлений стовпець (об'єкт DataColumn) при збереженні DataSet у форматі XML (шляхом виклику методу DataSet.WriteXml)

ColumnName – дозволяє отримати або встановити ім'я стовпця в колекції Columns (внутрішня колекція для стовпців в DataTable). Якщо ім'я стовпця не визначено явно, то будуть використані значення за замовчуванням: Columnl, Column2, Column3 і т. д.

DataType – визначає тип даних (boolean , string , float і т. п. ), що використовується для значень в стовпці

DefaultValue – дозволяє встановити або отримати значення за замовчуванням для стовпця. Це значення буде автоматично використано , якщо при вставці нового рядка не задати явно інше значення

Expression – дозволяє отримати або встановити вираз, що використовується для фільтрації нових рядків, обчислення значення в стовпці або створення стовпців з агрегатними значеннями

Ordinal – дозволяє встановити порядковий номер стовпчика в колекції Columns у DataTable

ReadOnly – визначає, чи буде стовпець тільки для читання (якщо так, то значення в цьому стовпці після додавання рядка змінювати вже буде неможливо). За замовчуванням має значення faise

Table – повертає об'єкт DataTable, якому належить даний об'єкт DataColumn

Unique – дозволяє визначити, чи будуть у стовпці допускатися повторювані значення. Якщо стовпець є первинним ключем, то ця властивість повинна мати значення true

Приклад створення стовпців для таблиці Node:

DataColumn dc;

dc = new DataColumn("NodeID", typeof(uint));

dc.AllowDBNull = false;

dc.Unique = true;

dt.Columns.Add(dc);

dc = new DataColumn("Name", typeof(string));

dc.AllowDBNull = false;

dc.Unique = true;

dt.Columns.Add(dc);

dc = new DataColumn("X", typeof(int));

dt.Columns.Add(dc);

dc = new DataColumn("Y", typeof(int));

dt.Columns.Add(dc);

Налаштування представлення стовпця в форматі XML

Властивість ColumnMapping об’єкта DataColumn визначає, як даний стовпець буде представлений в форматі XML при витяганні вмісту стовпця за допомогою методу WriteXml. Для властивості ColumnMapping використовуються значення з перерахування MappingType:

Attribute – стовпцю відповідає атрибут XML

Element – стовпцю відповідають елемент XML (значення за замовчанням)

Hidden – стовпцю відповідає внутрішня структура

TableElement – стовпцю відповідає значення таблиці

Text – стовпцю відповідає значення тексту

При використанні значення Element стовпцю NodeID в текстовому файлі будуть відповідати значення виду:

<Node>

<NodeID>1</NodeID>

</Node>

При використанні значення Attribute:

<Node NodeID = “1” />

Тип DataRow

Колекція об'єктів DataRow об’єкту DataTable визначає дані, що зберігаються в таблиці. Кожен запис в таблиці представлений окремим об'єктом DataRow . За допомогою членів класу DataRow ми можемо виконувати операції вставки, зміни та видалення рядків з таблиці, а також порівнювати значення , що містяться в рядках.

Клас DataRow визначає індексатор, за допомогою якого можна отримати значення з поля рядка за порядковим номером. Звичайно ж, те ж саме значення можна отримати і по імені стовпця.

Члени класу DataRow:

AcceptChanges(), RejectChanges() – для запису в рядок (або відмови від них ) всіх змін, зроблених починаючи з моменту , коли останній раз був викликаний метод AcceptChanges()

BeginEdit(), EndEdit(), CancelEdit() – почати , завершити . припинити операції редагування для об'єкта DataRow

Delete() – позначає рядок для видалення при наступному виклику методу AcceptChanges()

HasErrors, GetColumnsInErrors(), GetColumnError(), ClearErrors(), RowError – властивість HasErrors повертає логічне значення, що визначає , чи є помилки у значеннях стовпців для цього рядка. Якщо такі помилки є то для отримання значень, які порушують встановлені правила, можна використовувати метод GetColumnsInError(). Для отримання опису помилки можна використовувати GetColumnError(), a ClearErrors() просто видаляє всі помилкові значення з рядка. Властивість RowError дозволяє налаштувати текстовий опис для помилки в стовпці

IsNull() – повертає інформацію про те , чи містить рядок у вказаному полі порожнє значення (значення типу NULL)

ItemArray – дозволяє отримати або встановити значення всіх полів рядка за допомогою масиву об'єктів

RowState – дозволяє отримувати інформацію про стан об'єкта DataRow. Використовуються значення з перерахування RowState

Table –використовується для отримання покажчика на таблицю, що містить поточний об'єкт DataRow

Значення перерахування DataRowState:

Deleted – рядок було змінено за допомогою методу DataRow.Delete()

Detached – рядок було створено, але він ще не є частиною DataRowCollection. Зазвичай рядок знаходиться в такому стані безпосередньо після вставки або після примусового виведення із колекції DataRowCollection

Modified – рядок було змінено, але метод AcceptChanges() ще не викликався

New – рядок було додано у колекцію але метод AcceptChanges() ще не був викликаний

Unchanged – рядок не був зміненим з моменту останнього виклику методу AcceptChanges()

Більшість методів і властивостей класу DataRow використовується тільки в контексті розміщення об'єкта DataRow у таблиці (DataTable).

Приклад додання рядків у таблицю Nodes:

if(graph.Nodes != null)

foreach (KeyValuePair<uint, Node> pair in graph.Nodes)

{

DataRow dr = dt.NewRow();

dr["NodeID"] = pair.Value.ID;

dr["Name"] = pair.Value.Name;

dr["X"] = pair.Value.X;

dr["Y"] = pair.Value.Y;

dt.Rows.Add(dr);

}

Можливості класу DataSet

Уміння створювати таблиці з даними (об'єкти DataTable) в оперативній пам'яті і виконувати з ними всі необхідні операції може бути цілком достатньо для багатьох додатків. Однак набагато частіше таблиці в базах даних використовуються не самі по собі, а у взаємодії дії з іншими таблицями. У ADO.NET можливості роботи з наборами таблиць, взаємозалежних одна від одної, надає клас DataSet. Усі інтерфейси для доступу до даних в ADO.NET повертають саме об'єкт DataSet (як набір взаємозв'язаних об'єктів DataTablе).

Об'єкт DataSet – це набір таблиць (об'єктів DataTablе), зв'язаних між собою відношеннями і забезпечених засобами перевірки цілісності даних (для них в DataSet передбачені свої об'єкти), що створюється у оперативній пам'яті.

Доступ до внутрішніх колекцій DataTableCol1ection, DataRelationCollection та PropertyCollection об’єкту DataSet здійснюється через властивості Tables, Relations і ExtendedProperties відповідно.

Властивість ExtendedProperties забезпечує доступ до об'єктів, що зберігаються в колекції PropertyCollection. Основне їх призначення – забезпечити можливість асоціювати додаткову інформацію (у вигляді пар ім'я-значення ) з об'єктом DataSet. В принципі цією додатковою інформацією може бути все, що завгодно. Наприклад , ми можемо самостійно визначити, що у нашого об'єкта DataSet буде властивість CompanyName, а як значення цієї властивості вказати ім'я нашої компанії. Виглядати це буде так :

DataSet ds = new DataSet ( " MyDataSet " );

ds.ExtendedProperties.Add ( "CompanyName", "InterTech. Inc" );

Console.WriteLine ( ds.ExtendedProperties ["CompanyNanie"].ToString() ) :

Ми можемо використовувати розширені властивості для зберігання самої різної інформації: наприклад, про внутрішній паролі для доступу до даних , про інтервал синхронізації даних і т. п. Крім тог , розширені властивості (тобто властивість ExtendedProperties) передбачені не тільки для DataSet, але й для DataTable.

Приклад створення об’єкту DataSet для графа:

DataSet ds = new DataSet("Graph " + graph.Name);

ds.Tables.Add(CreateNodeTable(graph));

ds.Tables.Add(CreateLinkTable(graph));

ds.Tables.Add(CreateGraphTable(graph));

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]