
- •Организация 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#-системы ввода-вывода: байтовые и символьные потоки. Встроенные потоки.
16. Создание соединения с источником данных. Члены типа dbConnection. Обработка исключений при работе с ms sql
Члены класса SqlConnection. Рассмотрим объект подключения к базе данных СУБД Microsoft SQL Server, т.е. класс SqlConnection. Он предоставляет открытое подключение к базе данных SQL Server и не наследуется. Класс SqlConnection предоставляет следующие члены:
Конструкторы
SqlConnection() – инициализирует новый экземпляр класса SqlConnection.
SqlConnection(String) – инициализирует новый экземпляр класса SqlConnection, получив строку подключения.
Свойства
CanRaiseEvents – возвращает значение, показывающее, может ли компонент вызывать событие. (Унаследовано от Component.)
ConnectionString – возвращ или задает строку, использ-ую для подключения к БД SQL Server. (Переопределяет DbConnection.ConnectionString.)
ConnectionTimeout – получает время ожидания при попытке установки подключения, по истечении которого попытка подключения завершается и создается ошибка. (Переопределяет DbConnection.ConnectionTimeout.)
Database – получает имя текущей БД или БД, к-ая будет использоваться после открытия подключения. (Переопределяет DbConnection.Database.)
DataSource – Имя или сетевой адрес экземпляра SQL Server, к к-му осуществл подключение. (Переопределяет DbConnection.DataSource.)
Events – возвращает список обработчиков событий, которые прикреплены к этому объекту Component. (Унаследовано от Component.)
Методы
BeginTransaction() – начинает транзакцию базы данных.
ChangeDatabase – изменяет текущую базу данных для открытого подключения SqlConnection. (Переопределяет DbConnection.ChangeDatabase(String).)
ChangePassword – заменяет пароль SQL Server для пользователя, указанного в строке подключения, заданным новым паролем.
Close – закрытие подключения к БД. Реком-ся использ этот метод для закрытия любого открытого подключения. (Переопред-т DbConnection.Close())
CreateCommand – создает и возвращает объект SqlCommand, связанный с SqlConnection.
Dispose() – освобождает все ресурсы, используемые объектом Component. (Унаследовано от Component.)
GetSchema() – возвращает информацию схемы для источника данных этого объекта SqlConnection. (Переопределяет DbConnection.GetSchema().)
GetType – возвращает объект Type для текущего экземпляра. (Унаследовано от Object.)
Open – открывает подключение к базе данных со значениями свойств, определяемыми объектом ConnectionString. (Переопределяет DbConnection.Open().)
События
Disposed – происходит при удалении компонента вызовом метода Dispose. (Унаследовано от Component.)
Командная строка соединения ConnectionString. Явное управление соединением (с помощью строки соединения) обладает рядом преимуществ: дает более чистый и удобный для чтения код; помогает при отладке приложения; является более эффективным. Строка соединения ConnectionString определяет параметры, необходимые для установления соединения с источником данных. Каждый параметр оформляется как пара «имя-значение». Параметры разделяются точками с запятой.
Рассмотрим строки соединения, которые подключают БД BDTur_firm.mdb и BDTur_firmSQL.mdf.
// База данных BDTur_firm:
Provider=Microsoft.Jet.OLEDB.4.0;
Data Source="D:\ВМИ\For ADO\BDTur_firm.mdb" // путь к БД
// База данных BDTur_firmSQL.mdf:
Data Source=.\SQLEXPRESS;
AttachDbFilename="D:\ВМИ\For ADO\ BDTur_firmSQL.mdf";
Integrated Security=True;
Connect Timeout=30;
User Instance=True
В этих строках ч-з точку с запятой просто перечисляются параметры соединения.
В таблице приводятся основные параметры строки соединения :
Параметр |
Описание |
Provider (Поставщик) |
Свойство применяется для установки или возврата имени поставщика для соединения, используется только для объектов OleDbConnection. |
Connection Timeout или Connect Timeout (Время ожидания связи) |
Длительность времени ожидания связи с сервером перед завершением попытки и генерацией исключения в секундах. По умолчанию 15. |
Initial Catalog (или AttachDbFilename) (Исходный каталог) |
Полное имя базы данных (“D:\Связный уровень\База данных\Friedens.mdf”) |
Data Source |
Имя используемого SQL-сервера, когда установлено соединение (.\SQLExpress), или имя файла базы данных Microsoft Access. |
Password (Пароль) |
Пользовательский пароль для учетной записи SQL Server. |
User ID (Пользовательский ID) |
Пользовательское имя для учетной записи SQL Server. |
Workstation ID |
Имя рабочей станции или компьютера. |
Integrated Security или Trusted Connection (Интегрированная безопасность, или Доверительное соединение) |
Параметр, который определяет, является ли соединение защищенным. True, False и SSPI – возможные значения (SSPI – эквивалент True). |
Persist Security Info (Удержание защитной информации)
|
Когда установлено False, нуждающаяся в защите информация, такая как пароль, не возвращается как часть соединения, если связь установлена или когда-либо была установленной. Выставление этого свойства в True может быть рискованным в плане безопасности. По умолчанию False. |
Строка соединений при использовании мастеров генерируется средой, но можно (и желательно – во избежание неточностей и ошибок) писать эту строчку вручную.
Для явного управления соединением используется объект Connection.
Управление соединением. Объект Connection. Большинство источников данных поддерживает ограниченное количество соединений. Так, например, база данных MS Access может поддерживать одновременную работу не более чем с 255 пользователями. При попытке обращения к базе данных, лимит соединений которой исчерпан, пользователь не получит нужной ему информации и будет вынужден ждать освобождения соединения.
Задача разработчика заключается в минимизации времени связи с базой данных, поскольку соединение занимает полезные системные ресурсы. Когда вызывается метод объекта DataAdapter (например, метод Fill), то он сам проверяет, открыто ли соединение. Если соединения нет, то DataAdapter открывает соединение, выполняет задачи и затем закрывает соединение.
В качестве строки соединения можно использовать одну из строк из примеров для приложения, работающего с СУБД Microsoft Access.
Например, string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; " + "Data Source=D:\ВМИ\For ADO\BDTur_firm.mdb";
Теперь можно устанавливать соединение, вызывая метод Open объекта Connection:
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = ConnectionString;
conn.Open();
Способ №1: «Ручное» создание строки соединения
//Создание и открытие соединения:
SqlConnection cn = new SqlConnection();
/*Строка соединения:
Data Source=.\SQLEXPRESS;AttachDbFilename="D:\Связный уровень\База данных\Friedens.mdf";Integrated Security=True;Connect Timeout=30;User Instance=True*/
string st1="Data Source=.\\SQLExpress;";
string st2 = "AttachDbFilename=\"D:\\Связный уровень\\База данных\\Friedens.mdf\";";
string st3 = "Integrated Security=True;";
string st4 = "Pooling=False;";
cn.ConnectionString = st1 + st2 + st3 + st4;
Console.WriteLine(cn);
Console.WriteLine(st1 + st2 + st3 + st4);
cn.Open();
Console.WriteLine("************ Информация о соединении: ********");
Console.WriteLine("Полное имя базы данных "+cn.Database);
Console.WriteLine("Размещение базы данных "+cn.DataSource);
Console.WriteLine("Время ожидания " + cn.ConnectionTimeout);
Console.WriteLine("Состояние соединения "+cn.State.ToString());
Способ №2: Соединение с серверной базой данных с помощью построителя строки соединения
SqlConnectionStringBuilder bldr = new SqlConnectionStringBuilder();
bldr.DataSource = @"mif\sqlexpress";
bldr.InitialCatalog = "Friedens";
bldr.IntegratedSecurity = true;
SqlConnection cn = new SqlConnection(bldr.ConnectionString);
Console.WriteLine(cn.ConnectionString);
cn.Open();
Console.WriteLine("************ Информация о соединении: ********");
Console.WriteLine("Полное имя базы данных " + cn.Database);
Console.WriteLine("Размещение базы данных " + cn.DataSource);
Console.WriteLine("Время ожидания " + cn.ConnectionTimeout);
Console.WriteLine(cn.State.ToString());
Обработка исключений при работе с MS SQL. Подключение к базе данных представляет собой одно из слабых мест в работе программы. В силу самых разных причин клиент может не получить доступ к базе данных. Поэтому при создании приложения следует обязательно включать обработку исключений и возможность предоставления пользователю информации о них.
Для получения специализированных сообщений при возникновении ошибок подключения к базе данных Microsoft SQL Server используются классы SqlException и SqlError. Объекты этих классов можно также применять для перехвата номеров ошибок, возвращаемых базой данных:
17 – Неверное имя сервера
4060 – Неверное название базы данных
18456 – Неверное имя пользователя или пароль
Дополнительно вводятся уровни ошибок SQL Server, позволяющие охарактеризовать причину проблемы и ее сложность:
Интервал возвращ. знач |
Описание |
Действие |
11–16 |
Ошибка, созданная пользователем |
Пользователь должен повторно ввести верные данные. |
17–19 |
Ошибки программного обеспечения или оборудования |
Пользователь может продолжать работу, но некоторые запросы будут недоступны. Соединение остается открытым. |
20–25 |
Ошибки ПО или оборудования |
Сервер закрывает соединение. Польз-ль должен открыть его снова. |
При возникновении исключительной ситуации при соединении с БД возникает исключение типа SqlException. Информация о возникших ошибках содержится в свойстве Errors, представляющем собой коллекцию объектов типа SqlError. Ошибка определяется целочисленным свойством Number, представляющим номер ошибки. Анализируя значение, можно определить причину возникновения ошибки и действия, которые необходимо предпринять для ее устранения.