- •Атрибуты в среде .Net и языке c#.
- •Метаданные
- •Понятие атрибутов
- •Предопределенные и собственные атрибуты
- •Потребители атрибутов
- •Применение атрибутов
- •Сокращенное именование атрибутов
- •Создание собственных атрибутов:
- •Применение собственных атрибутов:
- •Ограничение использования атрибутов:
- •Атрибуты уровня сборки и модуля:
- •Рефлексия атрибутов:
- •Выводы:
- •Язык xml. Классы платформы .Net для работы с xml-данными.
- •Синтаксис xml
- •Работа с xml при помощи System.Xml
- •Работа с xml при помощи linq to xml
- •Выводы:
- •Потоковый ввод-вывод. Файлы. Работа с файлами и каталогами. Пространство имен System.Io
- •Классы Directory (DirectoryInfo) и File (FileInfo) Некоторые общие свойства классов DirectoryInfo и FileInfo:
- •Дополнительные возможности класса DirectoryInfo
- •Дополнительные возможности класса FileInfo
- •Дополнительные члены File
- •Потоковый ввод-вывод
- •Работа с классом FileStream
- •Работа с классами StreamWriter и StreamReader
- •Классы StringWriter и StringReader
- •Работа с классами BinaryWriter и BinaryReader
- •Выводы:
- •Сериализация. Атрибуты. Стандартные форматы сериализации. Понятие сериализации объектов
- •Роль графов объектов
- •Конфигурирование объектов для сериализации
- •Общедоступные поля, приватные поля и общедоступные свойства
- •Стандартные форматеры сериализации
- •Настройка сериализации с использованием атрибутов
- •Выводы:
- •Понятие бд и субд. Язык sql. Ado.Net как средство доступа из c# к субд. Понятие бд
- •Понятие субд
- •Обзор синтаксиса
- •Подключенный уровень
- •Автономный уровень
- •Основные свойства класса DataSet
- •Основные методы класса DataSet
- •Типы DataColumn и DataRow
- •Основные члены типа DataColumn:
- •Основные члены типа DataRow:
- •Работа с адаптерами данных:
- •Основные члены класса DbDataAdapter:
- •Параллельные вычисления. Многозадачность и многопоточность.
- •Некоторые члены класс Process:
- •Некоторые члены класса ProcessThread
- •Домены приложений
- •Некоторые члены класс AppDomain:
- •Многопоточность. Классификация состояний потока. Средства многопоточного программирования System.Threading.
- •Некоторые члены пространства имен System.Threading
- •Основные члены класс Thread
- •Состояния потока
- •Многопоточное программирование при помощи асинхронных вызовов делегатов
- •Создание вторичных потоков при помощи Thread.Start()
- •Синхронизация с помощью lock
- •Синхронизация с использованием типа System.Threading.Monitor
- •Синхронизация с использованием типа System.Threading.Interlocked
- •Синхронизация с использованием атрибута [Synchronization]
- •Использование System.Threading.Timer
- •Пул потоков clr
- •Библиотека Windows.Forms. Пространства имен. Структура приложения. Элементы управления. События. Иерархия элементов управления.
- •Основные пространства имен Windows Forms
- •Структура приложения WinForms
- •Элементы управления
- •События
- •Библиотека wpf. Отличия wpf от WindowsForms. Разметка xaml. Понятие Windows Presentation Foundation
- •Типы приложений wpf
- •Основные сборки wpf
- •Построение приложения wpf без xaml
- •Построение приложения wpf с использованием только xaml
- •Пример c# обработчика события для контрола, объявленного в xaml (связь кода и xaml):
- •Создание проекта
- •Знакомство с инструментами визуального конструктора wpf
Подключенный уровень
Соединение с базами данных обеспечивается за счет так называемых поставщиков данных. Они представлены классами, унаследованными от DbConnection. Примеры поставщиков:
SqlConnection, OracleConnection, OdbcConnection, MySqlConnection.
Рассмотрим взаимодействие с базой данных на примере SqlConnection :
Для выполнения команды базы данных нужно:
Создать, настроить и открыть объект подключения.
Создать и настроить объект команды, указав объект подключения в аргументе конструктора или через свойство Connection.
Для чтения массива записей (например, результата команды SELECT) вызвать метод ExecuteReader() настроенного объекта команды и обрабатывать каждую запись с помощью метода Read() объекта чтения данных.
Для выполнения команды, не предусматривающей возвращение произвольного числа записей, использовать метод ExecuteNonQuery() объекта команды.
Пример:
// Создание подключения
using ( SqlConnection cn = new SqlConnection() )
{
// установка строки подключения
cn.ConnectionString =
@"Data Source=(local)\SQLEXPRESS;Initial Catalog=DataBase1";
// открытие подключения
cn.Open();
// создаем объект команды SQL CREATE
SqlCommand createCommand =
new SqlCommand("CREATE TABLE Table1 (Field1 INTEGER, Field2 INTEGER)");
// выполняем не-Select запрос
createCommand.ExecuteNonQuery();
// создаем объект команды SQL SELECT
SqlCommand myCommand = new SqlCommand("SELECT * FROM Table1", cn);
// получение объекта чтения данных SELECT-запроса и просмотр результатов
using ( SqlDataReader myDataReader = myCommand.ExecuteReader() )
{
while ( myDataReader.Read() )
{
Console.WriteLine("Field1: {0}, Field2: {1}",
myDataReader["Field1"].ToString(),
myDataReader["Field2"].ToString()
);
}
}
// закрытие подключения
cn.Close();
}
Автономный уровень
Автономный уровень предоставляет типы данных, позволяющие эмулировать реляционные данные с помощью модели объектов, находящихся в памяти. Кроме простого моделирования табличных данных, состоящих из строк и столбцов, типы из System.Data позволяют воспроизводить отношения между таблицами, ограничения столбцов, первичные ключи, и другие примитивы баз данных. К смоделированным данным можно применять фильтры, отправлять запросы и сохранять (или загружать) данные в формате XML и двоичном формате. Все это можно делать, даже не подключаясь к СУБД (откуда и термин "автономный уровень") — достаточно загрузить данные из локального XML-файла или программным образом создать объект.
Автономные типы действительно можно использовать без подключения к базе данных, но все-таки обычно применяются подключения и объекты команд. Кроме того, используется и особый объект — адаптер данных (расширяющий абстрактный тип DbDataAdapter), который как раз обеспечивает связь с реальной базой данных. Тип DataSet представляет собой контейнер для любого количества объектов DataTable, каждый из которых содержит коллекцию объектов DataRow и DataColumn.