Управляемые провайдеры ADO.NET Подключение к базам данных Управляемый провайдер OLE DB Провайдер OLE DB реализуется при помощи типов, определенных в пространстве имен System.Data.OleDb. Провайдер OleDb позволяет нам обращаться к данным, расположенным в любом хранилище, к которому можно подключиться по протоколу OLE DB. Таким образом, аналогично классическому ADO, вы можете использовать в ADO.NET управляемый провайдер OLE DB для доступа, например, к базам данных SQL Server, MS Access и Oracle. Однако поскольку при этом типы из пространства имен System. Data. OleDb должны взаимодействовать с обычным (не .NET) кодом драйверов OLE DB, то при таком обращении будет производиться множество преобразований вызовов .NET в вызовы СОМ, что в некоторых ситуациях может привести к падению производительности. Наиболее важные типы пространства имен System.Data.OleDb Таблица 13.12. Тип Описание OleDbCommand Представляет запрос SQL, производимый к источнику данных OleDbConnection Представляет открытое соединение с источником данных OleDbDataAdapter Представляет соединение с базой данных и набор команд, используемых для заполнения объекта DataSet, а также обновления исходной базы данных после внесения изменений в DataSet OleDbDataReader Обеспечивает метод считывания потока данных из источника в одном направлении (вперед) OleDbErrorCollection OleDbErrorCollection представляет набор ошибок и предупреждений, OleDbError возвращаемых источником данных. Сами эти ошибки OleDbException и предупреждения представлены объектами OleDbError. При возникновении ошибки может быть сгенерировано исключение, представленное объектом OleDbException OleDbParameterCollection Используются для передачи параметров процедуре, хранимой OleDbParameter на источнике данных. Параметры представлены объектами OleDbParameter, весь набор — объектом OleDbParameterCollection Установление соединения при помощи типа OleDbConnection // Первый шаг: устанавливаем соединение OleDbConnection cn = new OleDbConnection(); cn.ConnectionString = "Provider=SQLOLEDB.1;" + "Integrated Security=SSPI;" + "Persist Security Info=False;" + "Initial Catalog=Kontora;" + "Data Source=HOME-1E51FF62F3;"; cn.Open(); // Выполняем различные операции cn.Close(); Data Source — это имя компьютера, с которым мы устанавливаем соединение. Initial Catalog — имя базы данных, к которой мы подключаемся (в нашем случае Kontora). Provider — это имя провайдера OLE DB, который будет использован для обращения к источнику данных. Установление соединения при помощи типа OleDbConnection Таблица 13.13. Наиболее часто используемые провайдеры OLE DB Microsoft.JET.OLEDB.4.0 Этот провайдер OLE DB используется для подключения к базам данных JET 9, то есть Access) MSDAORA Для подключения к базам данных Oracle SQLOLEDB Для подключения к базам данных MS SQL Server Члены класса OleDbConnection Таблица 13.14. BegiriTransaction() Используются для того, чтобы программным образом начать CommitTransacton() транзакцию, завершить ее или отменить RollbackTransaction() Close() Закрывает соединение с источником данных (наиболее рекомендуемый способ) ConnectionString Позволяет настроить строку подключения при установлении соединения или получить ее содержание ConnectonTimeout Позволяет получить или установить время тайм-аута при установке соединения Database Позволяет получить или установить название текущей базы данных во время подключения DataSource Позволяет получить или установить имя источника данных Ореn() Открывает соединение с базой данных, используя текущие настройки свойств соединения Provider Позволяет получить или установить имя провайдера State Позволяет получить информацию о текущем состоянии соединения Построение команды SQL Объектно-ориентированным представлением запроса на языке SQL в ADO.NET является класс OleDbCommand. Сам текст команды определяется через свойство OleDbCommand.CormandText. // Второй шаг: создаем команду SQL // Первый вариант выполнения SQL-запроса string strSQL1 = "Select * from k_firm": OleDbCommand myCommand = new OleDbCommand(strSQL1, cn); // Второй вариант выполнения SQL-запроса string strSQL2 = "Select * from k_firm"; OleDbCommand myCommand2 = new OleDbCommand(): myCommand2.Connection = cn; myConmand2.CommandText = strSQL2; Члены класса OleDbCommand Таблица 13.15. Cancel() Прекращает выполнение команды CommandText Позволяет получить или задать текст запроса на языке SQL (возможно, с особенностями диалекта, определяемыми типом источника данных), который будет передан источнику данных CommandTimeout Позволяет получить время тайм-аута при выполнении команды. По умолчанию это время равно 30 секундам CommandType Позволяет получить или установить значение, определяющее, как именно будет интерпретирован текст запроса, заданный через свойство. Connection Позволяет получить ссылку на объект OleDbConnection, для которого используется данный объект OleDbCommand ExecuteReader() Возвращает объект OleDbDataReader Parameters Возвращает коллекцию параметров OleDbParameterCollection Prepare() Готовит команду к выполнению (например, она будет откомпилирована) на источнике данных Работа с OleDbDataReader Этот класс представляет однонаправленный (только вперед), доступный только для чтения поток данных, который за один раз возвращает одну строку в ответ на запрос SQL. // Третий шаг: получаем объект OleDbDataReader при помощи метода ExecuteReader() OleDbDataReader myDataReader; myDataReader = myCommand.ExecuteReader(); Работа с OleDbDataReader // Четвертый шаг: проходим циклом по всем возвращаемым данным while (myDataReader.Read()) { Console.WriteLine("Фирма: " + myDataReader["firm_name"].ToString()); } myDataReader.Close(): using System; using System.Data.OleDb; namespace ConsoleApplication6 { class Class1 { static void Main(string[] args) { // Первый шаг: устанавливаем соединение OleDbConnection cn = new OleDbConnection(); cn.ConnectionString = "Provider=SQLOLEDB.1;" + "Integrated Security=SSPI;" + "Persist Security Info=False;" + "Initial Catalog=Kontora;" + "Data Source=HOME-1E51FF62F3;"; cn.Open(); // Второй шаг: создаем команду SQL string strSQL = "SELECT * FROM k_firm"; OleDbCommand myCommand = new OleDbCommand(strSQL, cn); // Третий шаг: получаем объект OleDbDataReader при помощи метода ExecuteReader() OleDbDataReader myDataReader; myDataReader = myCommand.ExecuteReader(); // Четвертый шаг: проходим циклом по всем возращаемым данным while (myDataReader.Read()) { Console.WriteLine("Фирма: " + myDataReader["firm_name"].ToString()); } myDataReader.Close(); cn.Close(); } } Подключение к базе данных Access OleDbConnection cn = new OleDbConnection(); cn.ConnectionString = "Provider=Microsoft.JET.OLEDB.4.0.;" + @"Data Source=D:\book.mdb;";