- •Основные понятия и терминология бд.
- •2. Логическое и физическое описание данных.
- •4. Классификация субд. Трехуровневая архитектура бд.
- •5. Эволюция концепций бд. Основные характеристики первого и второго этапов.
- •11. Реляционная модель бд. Транзакции, триггеры и хранимые процедуры, ссылочная целостность на триггерах.
- •17. Физическая организация данных в субд:
- •18.Физическая организация данных в субд: индексирование. Организация индексов в виде б-деревьев и инвертированных списков.
- •19. Распределенные бд. Хранилища данных.
- •20. Sql. Состав операторов языка.
- •21. Структурированный язык запросов (sql). Оператор select и вычисления.
- •22. Структурированный язык запросов (sql). Вложенные и многотабличные запросы.
- •23.Структурированный язык запросов (sql). Операторы манипулирования данными.
- •24.Подходы разработки программного обеспечения под ос Windows. Достоинства и недостатки.
- •25.Платформа .Net Framework. Достоинства и недостатки.
- •26.Платформа .Net Framework. Архитектура: fcl, bcl, clr, cil, сборки.
- •27.Платформа .Net Framework. Классификация типов, базовые операции программирования: приведение типов, вызов методов, свойства.
- •28.Ado.Net. Архитектура. DataProvider и DataSet.
- •29.Ado.Net. Соединение с бд, строка подключения, Connection, Command. Основные свойства и методы.
- •30.Ado.Net. Выполнение команд и запросов к бд. Основные свойства и методы: CommandType, ExecuteNonQuery(), ExecuteScalar(), ExecuteReader().
- •31.Ado.Net. Параметризированные запросы. SqlParameter. Основные свойства и методы.
- •32.Ado.Net. Чтение данных и объект DataReader. Основные свойства и методы.
- •33. Ado.Net. Рассоединенный набор данных DataSet. Схема данных.
- •34. Ado.Net. Заполнение рассоединенного набора данных. Адаптер данных SqlDataAdapter. Основные свойства и методы.
- •35. Ado.Net. Класс DataColumn. Основные свойства и методы.
- •36. Ado.Net. Класс DataRow. Основные свойства и методы.
- •37. Ado.Net. Класс DataTable. Основные свойства и методы
- •38. Ado.Net. Задание схемы набора данных вручную (тип и имя отдельных столбцов таблицы, ограничения на столбцы и связи между таблицами).
- •39. Ado.Net. Навигация, поиск и фильтрация данных в DataSet. Основные свойства и методы. Типизированный набор данных.
- •41. Ado.Net. Синхронизация набора данных с бд. Основные свойства и методы. Класс CommandBuilder.
- •42. Схема взаимодействия между браузером и web-сервером. Понятие статических и динамических web-страниц. Особенности asp.Net.
- •43. Asp.Net. Компоненты web-приложения. Структура файла *.Aspx.
38. Ado.Net. Задание схемы набора данных вручную (тип и имя отдельных столбцов таблицы, ограничения на столбцы и связи между таблицами).
Вначале создадим объекты, соответствующие столбцам и таблицам, и поместим столбцы в таблицы:
DataColumn id_artists = new DataColumn(“id”, typeof(int));
DataColumn name = new DataColumn(“name”, typeof(string));
DataTableArtists = new DataTable(“Artists”);
Artists.Columns.Add(id_artists);
Artists.Columns.Add(name);
DataColumn id_disks = new DataColumn(“id”, typeof(int));
DataColumn title = new DataColumn (“title”, typeof(string));
DataColumn artists_id=new
DataColumn (“artists_id”, typeof(int));
DataColumn release_year = new
DataColumn(“release_year”, typeof(string));
DataTable Disks = new DataTable(“Disks”);
Disks.Column.Add(id_disks);
Disks.Column.Add(title);
Disks.Column.Add(artists_id);
Disks.Column.Add(release_year);
Теперь можно выполнить дополнительную настройку отдельных столбцов – задать максимальную длину, отсутствие нулевых значений:
id_artists.AllowDBNull = false;
name_AllowDBNull = false;
id_disks.AllowDBNull = false;
title.AllowDBNull = false;
name.MaxLength = 50;
title.MaxLength = 50;
release_year.MaxLength = 4; Если столбец является частью первичного ключа, его свойство AllowDBNull автоматически устанавливается в False. Установим первичные ключи наших таблиц
DataColumn[] Artists_PK = new DataColumn[1] {id_artists};
Artists.PrimaryKey = Artists_PK;
DataColumn[] Disks_PK = new DataColumn[1] {id_disks};
Disks.PrimaryKey = Disks_PK;
Изменим имя ограничения в одной из таблиц и добавим ограничение для столбца name таблицы Artists, полагая значения в этом столбце уникальными:
Artists.Constraints[0].ConstraintName = “PrimaryKey”;
UniqueConstraint uc = new UniqueConstraint(“Unique Name”, new DataColumn[]{name});
Artists.Constraints.Add(uc);
Создадим рассоединённый набор данных и поместим в него таблицы:
DataSet CD_Rent = new DataSet(“CD_Rent_Part”);
CD_Rent.Tables.Add(Artists);
CD_Rent.Tables.Add(Disks);
Между таблицами Artists и Disks существует связь по внешнему ключу. Таблица Disks является дочерней для таблицы Artists т.к. значения поля artists_id – это значения первичного ключа таблицы Artists.
Создадим объект DataRelation описывающий эту связь
// Используем самый простой конструктор, который устанавливает имя отношения, родительский и дочерний столбцы отношения
DataRelation Artists_to_Disks = new DataRelation(“Artists_to_Disks”, id_artists, artists_id);
// Добавляем отношение в набор данных
CD_Rent.Relations.Add(Artists_to_Disks);
После выполнения данного кода коллекция Constraints объекта Artists будет содержать 2 отношения с именами Primary Key и Unique Artist Name (оба – класса UniqueConstraint)
39. Ado.Net. Навигация, поиск и фильтрация данных в DataSet. Основные свойства и методы. Типизированный набор данных.
Типизированный набор данных – это класс, который является наследником класса DataSet. В отличие от DataSet, в типизированном наборе для доступа к отдельным компонентам служат свойства.
Создать типизированный DataSet можно несколькими способами:
в Visual Studio для этого используется специальный мастер (wizard)
в состав .NET Framework SDK входит утилита xsd.exe, формирующая типизированные наборы данных не основании XSD-файла со схемой набора
Имеется DataSet с заданной схемой и в этот набор данных загружены 2 таблицы из базы CD_Rent
SqlDataAdapter da = new SqlDataAdapter(“SELECT = FROM Artists”, “Server=(local); Database = CD_Rent;” + “Integrated Security=SSPI”);
da.MissingSchemaAction = MissingSchemaAction.Error;
da.Fill(CD_Rent, “Artists”);
da.SelectCommand.CommandText = “SELECT * FROM Disks”;
da.Fill(CD_Rent, “Disks”);
Наличие в схеме данных связей между таблицами позволяет осуществлять навигацию по набору данных.
GetChildRows() возвращает массив дочерних строк той строки, у которой вызывается. Параметром является имя связи между таблицами либо объект описывающий связь.
Метод GetParentRow() позволяет получить родительскую строку. Как и предыдущий метод GetParentRow() принимает в качестве параметра имя связи между таблицами либо объект описывающий связь, а возвращает все родительские строки определённой строки.
Для поиска информации в таблице как наборе данных можно использовать 2 метода:
Find() – позволяет искать строки по значениям первичного ключа
Select() – выступает в качестве фильтра возвращая строки данных, удовлетворяющих критериям поиска
Метод Find() предоставляемый классом DataRowCollection ищет строки таблицы с определённым значением первичного ключа искомой строки.
Метод Select() класса DataTable позволяет искать ряды по определённому критерию, метод возвращает массив найденных строк:
Строка-критерий может содержать слово LIKE, которое осуществляет поиск частичному совпадению
В этом случае используется шаблон, содержащий метасимволы * или % для обозначения начальной или конечной части строки DataRow[] result = Disks.Select(“title LIKE ‘U*’ “);
Иногда требуется заключить в символы-разделители имена столбцов, используемые в критерии поиска
Например, когда имя содержит пробел или другой символ не относящийся к алфавитно-цифровым или похоже на зарезервированное слово типа LIKE или SLIM
Так, если имя столбца – Space in Name и требуется выбрать все строки значение поля Space In Name которых ровно 3 воспользуйтесь следующим критерием поиска:
strCriteria = “[Space In Name] = 3”
Если имя столбца включает символ-разделитель поставьте в критерии поиска перед закрывающим символом –разделителем(]) управляющий символ (\)
Имя столбца – Bad]Column[Name
strCriteria = @[Bad\]Column[Name] = 5”;
Методу Select() можно просто передать строку запроса, а можно включить в неё порядок сортировки, а также параметр, определяющий состояние искомых строк (например, только добавленные строки или только изменённые)
Получим массив строк, отсортированных в убывающем порядке по полю title.
DataRow[] result = Disks.Select(“release_year = 2005”, “title DESC”);
Пусть потребуется просмотреть только изменённые и удалённые записи таблицы. Воспользуемся константами ModifedOriginal и Deleted из перечисления DataViewRowState и укажем в качестве параметров фильтрации и сортировки пустые строки:
DataRow[] result = Disks.Select (“ “, “ “, DataViewRowState.ModifiedOriginal | DataViewRowState.Deleted);
Метод DataTable.Select() имеет ограничения:
метод принимает динамические критерии поиска и поэтому не может быть сверхэффективным
Windows- и Web-формы не поддерживают связывание с возвращённым значением метода Select() – массивом объектов DataRow.
40. ADO.NET. Класс DataView. Основные свойства и методы.
Объекты DataView:
позволяют фильтровать, сортировать (свойства Table, RowFilter, Sort и RowStateFilter) и вести поиск в содержимом таблиц – методы Find() и FindRows()
не являются SQL-запросами в отличие от представлений (view) в БД
с их помощью нельзя объединить данные двух таблиц и просмотреть отдельные столбцы таблицы
У объекта DataView нет собственной копии данных. При обращении через него к данным он возвращает записи хранящиеся в соответствующем объекте DataTable
Чтобы просмотреть данные некоторой таблицы его следует связать с этой таблицей
Существуют 2 способа:
используя свойство Table объекта DataView
или при помощи конструктора DataView
DataTable dt = CD_Rent.Tables[“Disks”];
// Первый вариант
DataView dv = new DataView();
dv.Table = dt;
// Второй вариант
DataView dv = new DataView(dt);
У DataView также есть конструктор, задающий значения свойств Table, RowFilter, Sort и RowStateFilter в одной строке кода.
DataTable dt = CD_Rent.Tables[“Disks”];
// Первый вариант
DataView dv = new DataView();
dv.Table = dt;
dv.RowFilter = “release_year = 2005”;
dv.Sort = “title DESC”;
dv.RowStateFilter = DataViewRowState.ModifiedOriginal;
//Второй вариант
DataView dv = new DataView(dt, “release_year = 2005”, “title DESC”, DataViewRowState.ModifiedOriginal);
Свойство RowStateFilter принимает значения из перечисления DataViewRowState. Это перечисление можно рассматривать как комбинацию свойства RowState объекта DataRow и перечисления DataRowVersion
Например:
Added – отображаются добавленные строки
ModifiedOriginal – отображаются изменённые строки с их оригинальными значениями
CurrentRows – отображаются строки, которые не были удалены (значение по умолчанию)
Свойство RowStateFilter работает в качестве двойного фильтра
Например, если задать ему значение ModifiedOriginal через объект DataView окажутся доступны только изменённые записи, и вы будете видеть их оригинальные значения.
Объект DataView возвращает данные с помощью объекта – DataRowView. Функциональность DataRowView в целом аналогична функциональности DataRow.
DataRowView через свойство Item, позволяет обращаться к содержимому поля как по имени, так и по порядковому номеру.
Свойство Count возвращает число строк, и индексатор Item с целым индексом. Используя эти свойства, можно создать простой цикл для просмотра всех строк:
DataView dv = new DataView(dt, “id>10”, “title DESC”, DataViewRowState.CurrentRows);
foreach (DataRowView drv in dv)
{
Console.WriteLine(drv[“title”]);}