
- •Организация c#-системы ввода-вывода: байтовые и символьные потоки. Встроенные потоки.
- •Классы потоков. Класс Stream. Классы байтовых потоков. Классы символьных потоков. Классы двоичных потоков.
- •Класс FileStream и файловый ввод-вывод на побайтовой основе. Открытие и закрытие файла. Запись данных в файл. Считывание байтов из объекта класса FileStream.
- •Файловый ввод-вывод с ориентацией на символы. Использование класса StreamWriter. Использование класса StreamReader.
- •Считывание и запись двоичных данных. Класс BinaryWriter. Класс BinaryReader.
- •6. Навигация по файловой системе: классы для работы с файловой системой.
- •7. Получение сведений о файле; копирование файлов; перечисление файлов в папке; изменение расширения файлов.
- •5.3. Изменение расширения файлов
- •8. Основы организации потоков. Потоки и многозадачность. Пространство имен System.Threading. Класс Thread. Создание потока.
- •9. Использование нескольких потоков. Планирование потоков, приоритеты потоков.
- •10. Проблемы одновременности и синхронизации потоков. Общий доступ к данным из разных потоков, предотвращение коллизий.
- •11. Синхронизация доступа к общим данным с помощью блокировок. Управление временем существования потоков.
- •12. Краткий обзор ado.Net. Три стороны технологии ado.Net. Пространство имен System.Data.
- •13. Поставщики данных ado.Net. Поведение объектов подключения.
- •14. Объектная модель ado.Net
- •16. Создание соединения с источником данных. Члены типа dbConnection. Обработка исключений при работе с ms sql
- •Конструкторы
- •Свойства
- •События
- •17. Работа с бд с пом. Sql-запросов. Класс SqlCommand. Объект Command. Создание и инициализация. Командная строка sql-запроса CommandText.
- •Конструкторы
- •Свойства
- •18. Выборка, добавление, удаление и обновление данных с помощью sql-запросов на подсоединенном уровне.
- •19. Вывод информации с использованием объекта чтения данных: создание SqlDataReader; чтение данных из DataReader; чтение полей из текущей записи; закрытие DataReader.
- •20. Организация хранения данных. Объект DataSet
- •21. Таблицы и поля: объекты DataTable и DataColumn
- •22. Строки: объект DataRow
- •23. Связи между таблицами: объект DataRelation
- •24. Создание подключения к базе данных. Управляемые провайдеры
- •25. Объект DataAdapter. Класс SqlDataAdapter
- •Конструкторы:
- •Свойства
- •Организация c#-системы ввода-вывода: байтовые и символьные потоки. Встроенные потоки.
13. Поставщики данных ado.Net. Поведение объектов подключения.
Поставщики данных ADO.NET. ADO.NET не предлагает единого набора типов для связи со всеми СУБД. Вместо этого в ADO.NET имеются различ поставщики данных (провайдеры данных), каждый из к-ых оптимизирован для взаимод-вия с конкретн СУБД. Первая выгода этого подхода состоит в том, что можно запрограммировать особый поставщик данных для доступа к любым уникальн особенностям конкретн СУБД. Еще одна выгода — конкретн поставщик данных может напрямую подключиться к механизму соотв СУБД, не пользуясь междууровневым слоем отображения.По сути, поставщик данных — это мост м-ду приложением и источником данных.
Одной из ключевых идей, лежащих в основе модели поставщиков ADO.NET, явл расширяемость. Др словами, можно создавать собств поставщики для патентованных источников данных.
В рамках .NET Framework поставляется набор поставщиков данных, например, поставщик в стиле Oracle, Microsoft SQL Server и OLE DB/ODBC (рис.):
Рисунок – Уровни модели поставщиков данных
Поставщик SQL Server.NET Data Provider предоставляет оптимизированный доступ к БД Microsoft SQL Server (версии 7.0 и выше) и взаимодействует с ней напрямую по «родному» протоколу передачи данных SQL Server. Он расположен в пространстве имен System.Data.SqlClient. Поставщик OLE DB предоставляет доступ к любому источнику данных, который имеет драйвер OLE DB. Это включает базы данных SQL Server версий, предшествующих 7.0. Он расположен в пространстве имен System.Data.OleDb. Поставщик Oracle предоставляет оптимизированный доступ к базам данных Oracle (версии 8 и выше).
Примеч. Если ваше приложение работает с СУБД Microsoft Access, то следует подключить следующие директивы использования пространства имен:
using System.Data; using System.Data.OleDb;
Если ваше приложение работает с СУБД Microsoft SQL Server, то следует подключить следующие директивы использования пространства имен:
using System.Data; using System.Data.SqlClient;
Любой поставщик данных определяет набор типов, обеспеч-щих базовые функцион возможности. Базовые объекты поставщика данных ADO.NET, их базовые классы определены в пространстве имен System.Data.Common:
*Тип объекта→[Базовый класс]→(Реализованные интерфейсы)→Назначение*
Connection → [ SqlConnection; DbConnection; OracleConnection] → (IDbConnection) → Объект соединения. Позволяет подключаться к хранилищу данных и отключаться от него. Кроме того, объекты подключения обеспечивают доступ к соответствующим объектам транзакций
Command → [DbCommand; SqlCommand] → (IDbCommand) → Объект команды. Представляет SQL-запрос или хранимую процедуру. Кроме того, объекты команд предоставляют доступ к объекту чтения данных конкретн поставщика данных.
DataReader → [DbDataReader] → (IDataReader; IDataRecorder) → Объект чтения данных. Предоставляет однонаправленный доступ к данным только для чтения на стороне сервера.
DataAdapter → [DbDataAdapter; SqlDataAdapter; OracleDataAdapter] → (IDataAdapter; IDbDataAdapter) → Объект адаптера данных. Пересылает наборы данных из хранилища данных к вызывающему процессу и обратно. Адаптеры данных содержат подключение и набор из 4х внутрен объектов команд для выборки, вставки, изменения и удаления информации в хранилище данных.
Parameter → [DbParameter, SqlParametrs] → (IDataParameter; IDbDataParameter) → Объект параметра. Представл именованный параметр в параметриз. запросе
Transaction → [DbTransaction; SqlTransaction] → (IDbTransaction) → Объект транзакции. Выполняет транзакцию базы данных.
Хотя имена соотв-щих типов для разных поставщиков данных оказываются разными (напр, DbDataAdapter, SqlDataAdapter, OracleDataAdapter), каждый из таких объектов получается из одного и того же базового класса, что предполагает идентичность работы с ними.
Поведение объектов подключения. Необходимость подключения к источнику данных очень важна для любой архитектуры доступа к данным. ADO.NET позволяет организовать подключение к источнику данных с пом подходящ объекта подключения, к-ый входит в состав соотв-щего поставщика данных.
Чтобы открыть подключ, следует указать, какая инф-я необходима – напр, имя сервера, логин, пароль и т.д. Поскольку каждому целевому источнику подключения может понадобиться особый набор инф-и, позволяющий ADO.NET подключиться к источнику данных, выбран гибкий механизм указания всех параметров через строку подключения. Строка подключения содержит эл-ты с миним инф-ей, необход для установления подключ, в виде последовательности пар ключей-значений. Различные пары ключей-значений в строке подключ могут определять некотор конфигурируемые параметры, опред-щие поведение подключ. Сам объект подключ источника данных наследуется от класса SqlConnection и получает готовую логику, реализованную в базовых классах.
Приложение должно разделять дорогостоящий ресурс – открытое подключение, и совместно использовать его с др пользователем. Именно для этих целей введен пул подключений. По умолч пул подключений включен. При запросе ADO.NET неявно проверяет, имеется ли доступн неиспольз физич подключение к БД. Если такое подключение имеется, то она использует его. Для принятия решения имеется ли такое физич подключение или нет, ADO. NET учитывает загрузку приложения, и если поступает слишком много одновремен-ых запросов, ADO. NET может удерживать одновременно открытыми неск-ко физич подключений, т.е. увеличивать при необход-сти кол-во подключений. Подробнее:
Под классом SqlConnection имеется брокер, управляющий пулом открытых подключений. Он отвечает за увеличение или уменьшение реального кол-ва открытых подключ. Для класса брокера каждое запрошенное подключ уникально идентифицируется соотв строкой подключения. Поэтому, когда любое приложен запрашивает открытое подключ к одной и той же БД, оно в начале просматрив-т внутр кеш пула подключений, и если в нем есть доступное подключение, то используется оно. При отсутствии допустимого подключения создается новое, к-ое и передается приложению.