
- •Организация c#-системы ввода-вывода: байтовые и символьные потоки. Встроенные потоки.
- •Классы потоков. Класс Stream. Классы байтовых потоков. Классы символьных потоков. Классы двоичных потоков.
- •1.5. Классы символьных потоков:
- •1.6. Классы двоичных потоков:
- •Класс FileStream и файловый ввод-вывод на побайтовой основе. Открытие и закрытие файла. Запись данных в файл. Считывание байтов из объекта класса FileStream.
- •Файловый ввод-вывод с ориентацией на символы. Использование класса StreamWriter. Использование класса StreamReader.
- •Считывание и запись двоичных данных. Класс BinaryWriter. Класс BinaryReader.
- •Наиболее важные методы выходного потока BinaryWriter:
- •Навигация по файловой системе: классы для работы с файловой системой.
- •Получение сведений о файле; копирование файлов; перечисление файлов в папке; изменение расширения файлов.
- •5.3. Изменение расширения файлов
- •Основы организации потоков. Потоки и многозадачность.
- •Пространство имен System.Threading. Класс Thread. Создание потока.
- •Создание потока. Чтобы создать поток, необходимо создать объект типа Thread. В классе Thread определен следующий конструктор: public Thread(ThreadStart entryPoint),
- •Приоритет потоков. Класс Thead поддерживает установку и получение приоритета потока. Для этого используется перечисление ThreadPriority. Его значения:
- •Использование нескольких потоков. Планирование потоков, приоритеты потоков. Можно создавать в программе несколько дочерних потоков.
- •Создать статический метод SimpleWork() в классе MultiThread (перед методом Main), который выводит на экран Id-номер каждого потока:
- •Проблемы одновременности и синхронизации потоков. Общий доступ к данным из разных потоков, предотвращение коллизий.
- •Синхронизация доступа к общим данным с помощью блокировок.
- •2) Выполнить блокировку операторов в ранее используемых методах SimpleWork и run:
- •Управление временем существования потоков.
- •Краткий обзор ado.Net. Три стороны технологии ado.Net. Пространство имен System.Data.
- •2.2 Три стороны технологии ado.Net
- •15.Поставщики данных ado.Net. Поведение объектов подключения.
- •Объектная модель ado.Net.
- •Создание соединения с источником данных. Члены типа dbConnection. Обработка исключений при работе с ms sql
- •Конструкторы
- •Свойства
- •События
- •Конструкторы
- •Свойства
- •Выборка, добавление, удаление и обновление данных с помощью sql-запросов на подсоединенном уровне.
- •Вывод информации с использованием объекта чтения данных: создание SqlDataReader; чтение данных из DataReader; чтение полей из текущей записи; закрытие DataReader.
- •Сравнение DataReader и DataSet:
- •Чтение данных из DataReader:
- •Организация хранения данных. Объект DataSet.
- •Строки: объект DataRow.
- •Конструкторы:
- •Свойства
- •Передача данных между источником данных и объектом DataSet. Обновление базы данных с помощью адаптера данных.
2.2 Три стороны технологии ado.Net
Библиотеки ADO.NET (.NET версии 3.5 и выше) можно применять тремя концептуально различными способами: в подключенном (связном) режиме, в автономном режиме и с помощью технологии Entity Framework. В .NET версии 2.0 используются лишь два первых способа взаимодействия.
При использовании подключенного уровня (connected layer), кодовая база явно подключается к соответствующему хранилищу данных и отключается от него. При таком способе использования ADO.NET обычно происходит взаимодействие с хранилищем данных с помощью объектов подключения, объектов команд и объектов чтения данных.
Автономный уровень (disconnected layer), позволяет работать с набором объектов DataTable (содержащихся в объекте DataSet), который представляет на стороне клиента копию внешних данных. При получении DataSet с помощью соответствующего объекта адаптера данных подключение открывается и закрывается автоматически. Понятно, что этот подход помогает быстро освобождать подключения для других вызовов и повышает масштабируемость систем.
Получив объект DataSet, вызывающий код может просматривать и обрабатывать данные без затрат на сетевой трафик. А если нужно занести изменения в хранилище данных, то адаптер данных задействуется для обновления данных, при этом подключение открывается заново для проведения обновлений в базе, а затем сразу же закрывается.
После выпуска .NET 3.5 SP1 в ADO.NET появилась поддержка новой технологии (новой функции API), которая называется Entity Framework (сокращенно EF). Технология EF показывает, что многие низкоуровневые детали работы с базами данных скрыты от программиста и отрабатываются за него при генерации соответствующего LINQ-запроса. Технологию LINQ рассмотрим в конце изучения темы.
2.3 Пространство имен System.Data. С точки зрения программиста, тело ADO.NET составляет базовая сборка с именем System.Data.dll. В этом двоичном файле находится значительное количество типов, совместно используемых всеми поставщиками данных ADO.NET, независимо от лежащего в их основе типа хранилища данных. Прикладные программы, позволяющие пользователям совместно использовать данные, могут использовать ADO.NET для подключения к источникам данных, а также для поиска, управления, и модификации этих данных.
Итак, ADO.NET – это часть Microsoft .NET Framework, т.е. набор средств и слоев, позволяющих приложению легко управлять и взаимодействовать со своим файловым или серверным хранилищем данных:
15.Поставщики данных ado.Net. Поведение объектов подключения.
ADO.NET не предлагает единого набора типов для связи со всеми СУБД. Вместо этого в ADO.NET имеются различные поставщики данных (провайдеры данных – data provider), каждый из которых оптимизирован для взаимодействия с конкретной СУБД. Первая выгода этого подхода состоит в том, что можно запрограммировать особый поставщик данных для доступа к любым уникальным особенностям конкретной СУБД. Еще одна выгода — конкретный поставщик данных может напрямую подключиться к механизму соответствующей СУБД, не пользуясь междууровневым слоем отображения.
При первом приближении поставщик данных можно рассматривать как набор типов, определенных в данном пространстве имен, который предназначен для взаимодействия с конкретным источником данных. Однако независимо от используемого поставщика данных, каждый из них определяет набор классов, обеспечивающих основную функциональность. По сути, поставщик данных — это мост между приложением и источником данных.
Одной из ключевых идей, лежащих в основе модели поставщиков ADO.NET, является расширяемость. Другими словами, разработчики могут создавать собственные поставщики для патентованных источников данных. В действительности доступно множество подтверждающих это примеров, которые демонстрируют, как создавать настраиваемые поставщики ADO.NET, служащие оболочками для не реляционных хранилищ данных, таких как файловая система или служба каталогов. Некоторые независимые производители также продают собственные поставщики данных для ADO.NET.
В рамках .NET Framework поставляется набор поставщиков данных, например, поставщик в стиле Oracle, Microsoft SQL Server и OLE DB/ODBC (рис. 1):
Р
исунок
1. – Уровни модели поставщиков данных
Поставщик 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, который предназначен для имеющегося источника данных. Если таковой не найден, можно воспользоваться OLE DB при наличии драйвера OLE DB для источника данных.
Любой используемый поставщик данных определяет набор типов, обеспечивающих базовые функциональные возможности. Базовые объекты поставщика данных 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 |
Объект адаптера данных. Пересылает наборы данных из хранилища данных к вызывающему процессу и обратно. Адаптеры данных содержат подключение и набор из четырех внутренних объектов команд для выборки, вставки, изменения и удаления информации в хранилище данных. |
Parameter |
DbParameter SqlParametrs |
IDataParameter, IDbDataParameter |
Объект параметра. Представляет именованный параметр в параметризованном запросе. |
Transaction |
DbTransaction SqlTransaction |
IDbTransaction |
Объект транзакции. Выполняет транзакцию базы данных. |
Хотя имена соответствующих типов для разных поставщиков данных оказываются разными (например, DbDataAdapter, SqlDataAdapter, OracleDataAdapter), каждый из таких объектов получается из одного и того же базового класса, что предполагает идентичность работы с ними.