Базы данных.pptx
- Количество слайдов: 41
Базы данных Саяпова Наталья, Юрова Анна 324 группа
XML • XML (e. Xtensible Markup Language) – это язык разметки документов, позволяющий структурировать информацию разного типа.
HTML / XML
Составляющие XML-документа • Тег - это текст между левой угловой скобкой (<) и правой угловой скобкой (>). Есть начальные теги (такие, как <name>) и конечные теги (такие, как </name>) • Элементом является начальный тег, конечный тег и все, что есть между ними. • Атрибут - это пара имя-значение внутри начального тега элемента. • Комментарий начинается с <!-- и заканчивается -->. Любая разметка внутри комментария игнорируется. • Инструкция по обработке имеют вид: <? приложение содержимое? >. Они несут информацию для приложения, которое будет обрабатывать данный документ.
Ключевые направления • XML упрощает обмен данными. XML - документы выполняют роль универсального формата для обмена информацией между отдельными компонентами большой программы. • XML создает возможность изящного кода. Поскольку XML-документы могут быть структурированы для идентификации каждой важной части информации (а также и отношений между частями), возможно написать код, который может обрабатывать эти XML-документы без участия человека. • XML создает возможность "умного" поиска. Поиск XML -документов по элементам, которые содержат нужный текст, даст вам значительно лучший набор результатов.
Правильные и действительные документы • Правильно построенный документ соответствует всем общим правилам синтаксиса XML, применимым к любому XML-документу. • Действительный документ дополнительно соответствует некоторым семантическим правилам. Это более строгая дополнительная проверка корректности документа на соответствие заранее определённым, но уже внешним правилам. Обычно такие правила хранятся в специальных файлах — схемах, где описана структура документа, все допустимые названия элементов, атрибутов и тд.
Некоторые правила • • • Корневой элемент Элементы не могут перекрываться Конечные теги являются обязательными Элементы чувствительны к регистру Атрибуты должны иметь значения в кавычках
Пространства имен • Чтобы различать схемы документов, каждой из них ставится в соответствие уникальный идентификатор ресурса (URI). Две схемы будут считаться тождественными тогда и только тогда, когда их уникальные идентификаторы будут совпадать.
ADO. NET • Цель максимально скрыть детали реализации конкретной базы
Представление данных • столбец (поле, атрибут) — § характеризуется определенным типом (данных), § множество значений столбца являются значениями одного типа; • строка (запись, кортеж) — § характеризуется кортежем атрибутов, § состоит из упорядоченного множества значений (кортежа) атрибутов; • таблица — § набор данных, представляющих объекты определенного типа, § состоит из множества элементов столбцов-строк, § каждая строка таблицы УНИКАЛЬНА;
Представление данных • первичный ключ таблицы — § непустое множество столбцов таблицы, соответствующие значения (комбинации значений) которых в строках таблицы обеспечивают уникальность каждой строки в данной таблице; • внешний ключ таблицы — § непустое множество столбцов таблицы, соответствующие значения (комбинации значений) которых в строках таблицы соответствуют первичному ключу другой таблицы § обеспечивает логическую связь между таблицами.
Доступ к данным
Data. Table • Объект Data. Table представляет одну таблицу базы данных. Таблица характеризуется: § схемой таблицы, § содержимым таблицы (информацией). Схема таблицы (структура объекта Data. Table) определяется двумя наборами: o множеством столбцов таблицы (набор Data. Columns, состоящий из множества объектов Data. Column), o множеством ограничений таблицы (набор Constraints, состоящий из множества объектов Constraint).
События класса Data. Table • Изменения строк § Data. Row. Changing – изменения вносятся в строку таблицы. Объявление обработчика: private static void Row_Changing( object sender, Data. Row. Change. Event. Args e ) § Data. Row. Changed – изменения внесены в строку таблицы. Объявление обработчика: private static void Row_Changed( object sender, Data. Row. Change. Event. Args e )
События класса Data. Table • Изменения столбцов § Data. Column. Changing – изменения вносятся в поле строки данных. Объявление обработчика: void Column_Changing (object sender, Data. Column. Change. Event. Args e) § Data. Column. Changed – изменения были внесены в поле строки данных Объявление обработчика: void Column_Changed (object sender, Data. Column. Change. Event. Args e)
Data. View • Объекты этого класса предоставляют простой последовательный доступ к строкам таблицы. • Data. View НЕ является средством преобразования исходной информации, зафиксированной в таблице. • Data. View предоставляет динамический взгляд на содержимое таблицы в зависимости от установленного в таблице порядка представления и вносимых в таблицы изменений.
Data. View Data. Table tbl = new Data. Table("XXX"); // Объявлен и определен объект "таблица" Data. View view; // Ссылка на вьюер view = new Data. View(); view. Table = tbl; // Привязали таблицу к вьюеру // Или можно по-другому view = new Data. View(tbl); // Создали и сразу привязали
Data. Set • Объект-представитель Data. Set представляет множество таблиц. • Содержащуюся в объекте Data. Set информацию можно изменять независимо от источника данных (от самой БД). • Любой объект-представитель класса Data. Set позволяет организовать чтение и запись содержимого в файл или область памяти. При этом можно читать и сохранять: o только содержимое объекта (собственно информацию из базы); o только структуру объекта – представителя класса Data. Set; o полный образ Data. Set (содержимое и структуру).
Пул соединений • Приложение создает объект соединения, устанавливает соединение с базой, использует его и, не разрывая соединения с базой, передает его в ПУЛ соединений. В дальнейшем, по мере необходимости, объект соединения используется из пула.
Запросы, которые не возвращают записей: • запросы обновления. Предназначаются для изменения содержимого базы данных
Запросы • запросы изменения. Предназначены для изменения структуры базы данных
Запросы, возвращающие значения из базы данных.
Command • Команда – объект, представляющий один из двух классов: либо класс Ole. Db. Command, либо класс Sql. Command.
Хранимая процедура • Хранимая процедура — объект базы данных, представляющий собой набор SQL-инструкций, который компилируется один раз и хранится на сервере. • в одной процедуре можно сгруппировать несколько запросов; • в одной процедуре можно сослаться на другие сохраненные процедуры, что упрощает процедуры обращения к БД; • выполняются быстрее, чем индивидуальные запросы SQL.
Способы создания команд • объявление и создание объекта команды в программном коде
Способы создания команд • использование инструментария, предоставляемого панелью Tool. Box (вкладка Data). Объект соответствующего класса перетаскивается в окно дизайнера с последующей настройкой этого объекта. • размещение (путем перетаскивания) хранимой процедуры из окна Server Explorer в окно дизайнера.
Command. Type
Command Execute. Xml. Reader – обеспечивает выбор строк из таблицы БД в формате XML. Возвращает неизменяемый объект XMLReader, который допускает последовательный однонаправленный просмотр извлеченных данных.
Data. Reader • Предоставляет подключенный к источнику данных набор записей, доступный лишь для однонаправленного чтения.
Data. Reader static void Has. Rows(Sql. Connection connection) { using (connection) { Sql. Command command = new Sql. Command( "SELECT Category. ID, Category. Name FROM Categories; ", connection); connection. Open(); Sql. Data. Reader reader = command. Execute. Reader(); if (reader. Has. Rows) { while (reader. Read()) { Console. Write. Line("{0}t{1}", reader. Get. Int 32(0), reader. Get. String(1)); } } else { Console. Write. Line("No rows found. "); } reader. Close(); } }
Пример using System; using System. Data; class Dataset 1: System. Data. Set { public Dataset 1(){ // Создаем таблицы this. Tables. Add(new Data. Table("otdel")); this. Tables. Add(new Data. Table("worker")); this. Tables. Add(new Data. Table("child")); // Создаем поля в таблицах // Таблица отделов this. Tables["otdel"]. Columns. Add(new Data. Column("rowid", typeof(long))); this. Tables[“otdel”]. Columns[“rowid”]. Autoincrement = true; this. Tables["otdel"]. Columns. Add(new Data. Column("name", typeof(string)));
Пример // Таблица работников this. Tables["worker"]. Columns. Add(new Data. Column("rowid", typeof(long))); this. Tables["worker"]. Columns["rowid"]. Auto. Increment =true; this. Tables["worker"]. Columns. Add(new Data. Column("parentid", typeof(long))); this. Tables["worker"]. Columns. Add(new Data. Column("name", typeof(string))); // Таблица детей this. Tables["child"]. Columns. Add(new Data. Column("rowid", typeof(long))); this. Tables["child"]. Columns["rowid"]. Auto. Increment= true; this. Tables["child"]. Columns. Add(new Data. Column("parentid", typeof(long))); this. Tables["child"]. Columns. Add(new Data. Column("name", typeof(string)));
Пример // Добавляем отношение между таблицами Data. Column parent. Col; Data. Column child. Col; // Таблицы Otdel и Worker. parent. Col= this. Tables ["otdel"]. Colu-mns["rowid"]; child. Col= this. Tables["worker"]. Colu-mns["parentid"]; this. Relations. Add(new Data. Relation ("worker. Relation", parent. Col, child. Col)); // Таблицы Worker и Child. parent. Col= this. Tables["worker"]. Colu-mns["rowid"], child. Col= this. Tables["child"]. Columns ["parentid"])); this. Relations. Add(new Data. Relation ("child. Relation", parent. Col, child. Col)); // Пишем полученную структуру в файл для дальнейшего использования. this. Write. Xml. Schema("xml 1. xml"); }
Пример //Структура БД из XML public Dataset 1(string Template. File){ this. Read. Xml. Schema(Template. File); } //метод, выводящий на экран структуру заданной в Data. Set 1 базы данных. public void Show. Tables. Info(){ // перебираем в цикле все таблицы и выводим имеющиеся в ней поля. foreach(Data. Table tbl in this. Tables){ Console. Write. Line("n[+]"+tbl. Table. Name); foreach(Data. Column column in tbl. Columns){ Console. Write. Line("|-"+column. Column. Name + ": "+column. Data. Type+"; "); } }
Пример // выводим все имеющиеся связи между таблицами. Console. Write. Line("n. Relations: "); foreach(Data. Relation rel in this. Relations){ Console. Write. Line("[+]"+rel. Relation Name); for(int i=0; i<rel. Parent. Columns. Length; i++) { Console. Write(" |-" + rel. Child. Table. Name+". "+ rel. Child. Columns[i]. Column. Name+"-> "); Console. Write. Line( rel. Parent. Table. Name+". "+ rel. Parent. Columns[i]. Column. Name); } }
Пример class Main. App{ static void Main(string[] args){ // Создаем Dataset обычным путем Dataset 1 ds 1 = new Dataset 1(); ds 1. Show. Tables. Info(); // Создаем Dataset с помошью файла XML схемы. Dataset 1 ds 2 = new Dataset 1(“xml 1. xml”); ds 2. Show. Tables. Info(); Console. Read. Line(); } }
Соединение с MS Access • Для соединения с базой данных MS Access (файл. mdb) в C# следует использовать класс Ole. Db. Connection со следующими параметрами соединения: provider=Microsoft. Jet. OLEDB. 4. 0; data source=database. File Здесь database. File — абсолютный путь к файлу базы данных Access
Пример
Пример
Пример
Пример
Базы данных.pptx