Тверской государственный университет
Опубликован: 13.09.2006 | Доступ: свободный | Студентов: 5134 / 388 | Оценка: 4.23 / 3.83 | Длительность: 28:12:00
Специальности: Программист, Менеджер
Лекция 6:

Объекты ADO (продолжение)

Провайдеры

Клиентское приложение, использующее объекты ADO, получает необходимые ему данные, обращаясь к Провайдеру. Провайдер или Поставщик данных - это приложение, обеспечивающее интерфейс между конкретным источником данных и клиентским приложением. Провайдер способен корректно транслировать вызовы методов ADO в запросы к источнику данных, выполнять эти запросы и передавать результаты клиентскому приложению. Несмотря на многообразие источников данных, многие из них имеют единый интерфейс запросов, что позволяет иметь одного Провайдера на все источники данных, экспонирующие единый интерфейс запросов. Конечно же, для уникальных источников данных может понадобиться разработка собственного Провайдера. Но для наиболее известных источников данных Провайдеры уже разработаны как Microsoft, так и другими фирмами, поддерживающими работу с источниками данных. Рассмотрим особенности ряда стандартных Провайдеров.

Провайдер ODBC

Полное имя этого Провайдера - Microsoft OLE DB Provider for ODBC. Он является Провайдером по умолчанию для объектов ADO, так что если не задать аргумент Provider в строке соединения, то связь по умолчанию будет осуществляться с этим Провайдером. Этот Поставщик данных позволяет связаться со всеми СУБД с интерфейсом ODBC. Все СУБД, поставляемые Microsoft - Microsoft SQL Server, Microsoft Access (Microsoft Jet database engine), Microsoft FoxPro - обладают этим интерфейсом. Но и СУБД других фирм, например Oracle, обладают, как правило, этим интерфейсом, так что Провайдер ODBC реально позволяет связаться с любой профессиональной базой данных.

Провайдер ODBC, являясь Провайдером по умолчанию, поддерживает все зависящие от Провайдера свойства и методы объектов ADO. Он поддерживает транзакции, в том числе и гнездованные транзакции. Однако различные СУБД могут обеспечивать различный уровень поддержки транзакций, например, Microsoft Access поддерживает гнездованные транзакции на глубину не более пяти уровней.

Для этого Провайдера аргумент Provider свойства ConnectionString следует установить как MSDASQL. Типичная строка соединения имеет вид:

"Provider = MSDASQL; DSN = dsnName; UID = userName; PWD = userPassword;"

Аргумент DSN (Data Source Name), задает имя источника данных. Это имя должно быть зарегистрировано в Администраторе источников данных ODBC, добраться до которого можно из панели управления. Вот как выглядит окно Администратора, в котором я установил DSN для тестовой базы данных.

Установка DSN в окне Администратора ODBC

Рис. 6.5. Установка DSN в окне Администратора ODBC

Приведу пример работы с этой базой данных:

Public Sub CreateODBCConnect()
	 'Создание соединения с тестовой базой данных Access
	Dim strConnStr As String
	Dim Start As Single, Finish As Single
	If Con1.State = adStateOpen Then Con1.Close	'закрыть соединение
		'Вариант1: Провайдер ODBC
		Con1.Provider = "MSDASQL"
		strConnStr = "DSN=dbTestingADO; DATABASE =c:\dbPP2000.mdb;"
		 'Вариант2: Провайдер Microsoft Jet
		'Con1.Provider = "Microsoft.jet.oledb.4.0"
		'strConnStr = "Data Source=c:\dbPP2000.mdb;"
		Start = Timer
		Con1.Open strConnStr
	'Создать команду
	'задание свойств объекта Command
	Cmd1.ActiveConnection = Con1
	Cmd1.CommandText = "Select * From [Книги]"
	Cmd1.CommandType = adCmdText
	'Открытие обновляемого объекта Recordset
	With Rst1
		.Open Source:=Cmd1, CursorType:=adOpenDynamic, _
			LockType:=adLockOptimistic
		
		recExist = False
		.MoveFirst
		Do While Not .EOF
			'Проверка существования записи
			If !Название = "Война и мир" Then recExist = True
			.MoveNext
		Loop
		If Not recExist Then
			.AddNew Array("Автор", "Название", "Год издания", _
							"Число страниц", "Цена"), _
					Array("Лев Толстой", "Война и мир", 2001, 799, 220)
		End If
	End With
	Con1.Close
	Finish = Timer
	Debug.Print "Время работы с таблицей:", Finish - Start
End Sub

Хочу обратить внимание на два момента:

  • В предыдущих примерах я работал с базой данных Access, используя Провайдер Microsoft.jet.oledb.4.0, специально разработанный для этой базы. Сейчас же для работы с этой же базой данных я использую общий Провайдер, позволяющий работать с любыми базами, допускающими интерфейс ODBC. База данных Access, конечно же, позволяет такой способ работы. Однако время работы зависит от выбора Провайдера. Этот пример позволяет сравнить два варианта, в каждом из которых устанавливается связь с одним из выше упомянутых Провайдеров. Соответствующие операторы подсвечены в тексте процедуры. Поочередно комментируя операторы, задающие вариант соединения, я запускал процедуру на выполнение и получал время ее выполнения для того или иного Провайдера. Приведу временные характеристики, полученные при двух запусках этой процедуры:
    Время работы с таблицей: 5,878906 
    Время работы с таблицей: 0,0390625

    Заметьте, время работы с ODBC Провайдером для базы данных Access в данном случае существенно больше, - на два порядка, чем время работы с "родным" Провайдером.

  • При работе с ODBC Провайдером, обратите внимание, помимо DSN я задал аргумент DATABASE, указывающий путь к базе данных. Эта информация является дублирующей, поскольку реальный путь к базе данных задается в момент определения DSN. Тем не менее, это полезно делать, чтобы явно указать, с какой базой данных пользователь намеревается работать.

Провайдер ODBC добавляет в коллекцию Properties объектов Connection, Command, Recordset ряд свойств, часть из которых является специфической для данного Провайдера. Некоторые из этих свойств добавляются к не открытым объектам, другие - при открытии объектов. Для всех этих свойств, доступных в ADO, есть аналог в модели OLE DB. Перечисление всех этих свойств заняло бы слишком много места. Чтобы дать некоторое представление, укажу несколько свойств объекта Connection:

  • Accesible Tables - булево свойство, указывающее, имеет ли пользователь разрешение на выполнение запросов (SQL-операторов) над таблицами базы данных.
  • File Usage - указывает, как драйвер воспринимает источник данных, - как файл или как каталог.
  • Special Characters - указывает, какие символы имеют специальный смысл для ODBC драйвера.
  • Stored Procedures - определяет доступность использования хранимых процедур.

Провайдер Microsoft Jet

Этот Провайдер позволяет получить доступ к Microsoft Jet базам данных, а, следовательно, к базам данных, созданным в приложении Access. В большинстве приведенных примерах использовался именно этот Провайдер. Типичная строка соединения имеет вид:

"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=databaseName;
User ID =userName; Password=userPassword;"

В строке соединения Провайдеру могут быть переданы и специфические свойства, например, параметр Jet OLEDB: Database Password позволяет задать пароль к базе данных. В одном из последующих примеров я использую этот способ, чтобы указать имя системной базы данных. Другой способ передачи специфических для Провайдера параметров - через коллекцию Propertieis объекта Connection. Заметьте, большую часть этой коллекции для объектов Connection, Command и Recordset Провайдер формирует динамически.

Провайдер Internet Publishing

Полное имя этого Провайдера - Microsoft OLE DB Provider for Internet Publishing. Он позволяет получить доступ к ресурсам Web-серверов, работающих под управлением Internet Information Server. Типичная строка соединения имеет вид:

"Provider= MSDAIPP.DSO; Data Source=ResourceURL; 
User ID =userName; Password=userPassword;"

или

"URL =ResourceURL; User ID =userName; Password=userPassword;"

Параметр Data Source | URL задает источник данных - URL файла или каталога, расположенного в Web-парке на сервере. Заметьте, во втором случае, когда используется имя URL для второго параметра, первый параметр, определяющий Провайдера, задавать не следует. Ошибка возникнет и в том случае, если предварительно будет задано свойство Provider.

Примеры использования этого Провайдера уже были приведены.

Провайдер SQL Server

Полное имя этого Провайдера - Microsoft OLE DB Provider for SQL Server. Он позволяет получить доступ к данным Microsoft SQL Server. Типичная строка соединения имеет вид:

"Provider= SQLOLEDB; Data Source=ServerName; Initial Catalog =databaseName; 
User ID =userName; Password=userPassword;"

Параметр Data Source или Server задает имя сервера. Параметр Initial Catalog или Database - имя базы данных на сервере.

В строке соединения Провайдеру могут быть переданы и специфические свойства, например, параметр Current Language позволяет задать язык, используемый для системных сообщений. Язык должен быть инсталлирован на SQL Server, иначе возникнет ошибка в момент открытия соединения. Другой способ передачи специфических для Провайдера параметров - через коллекцию Propertieis объекта Connection. Большую часть этой коллекции для объектов Connection, Command и Recordset Провайдер формирует динамически.

Провайдер Oracle

Полное имя этого Провайдера - Microsoft OLE DB Provider for Oracle. Он позволяет получить доступ к базе данных Oracle. Типичная строка соединения имеет вид:

"Provider= MSDAORA; Data Source=ServerName; User ID =userName; 
Password=userPassword;"

Параметр Data Source задает имя сервера. В строке соединения Провайдеру могут быть переданы и специфические свойства, например, параметр OLE DB Services позволяет задать маску, каждый бит которой позволяет включить или выключить соответствующую OLE DB службу. Другой способ передачи специфических для Провайдера параметров - через коллекцию Propertieis объекта Connection. Большую часть этой коллекции для объектов Connection, Command и Recordset Провайдер формирует динамически.

Этот Провайдер поддерживает работу только со статическим курсором.

Другие Провайдеры

Краткие данные о других Провайдерах приведу в таблице.

Таблица 6.1. Характеристики Провайдеров
Название Провайдера Строка соединения Назначение
>Microsoft OLE DB Remoting Provider "Provider=MS Remote" Позволяет удаленному пользователю подключиться к источнику данных так, как если бы он был локальным пользователем.
Microsoft OLE DB Simple Provider (OSP) "Provider=MSDAOSP;Data Source=serverName" Позволяет ADO получить доступ к любым данным, для которых Провайдер написан с использованием специального инструментария - OLE DB Simple Provider Toolkit. Такие источники данных требуют лишь базисных средств поддержки OLE DB. Типичным примером данных являются - XML документы.
Microsoft OLE DB Persistence Provider "Provider=MSPersist" Этот Провайдер позволяет сохранить в файле данные и всю необходимую информацию об объекте Recordset, в том числе и иерархическом. Затем, при необходимости, объект Recordset может быть восстановлен.
Microsoft Data Shaping Service for OLE DB "Provider=MSDataShape" Поддерживает конструирование иерархических объектов Recordset.
Microsoft OLE DB Provider for Microsoft Indexing Service "Provider=MSIDXS;Data Source=myCatalog;Locale Identifier=nnnn;"

Типично указывается только первый параметр. Второй параметр задает имя каталога специальной поисковой службы - Indexing Service. Если параметр опущен, то по умолчанию используется системный каталог. Параметр Locale Identifier указывает предпочтения при форматировании данных, заданные пользовательским языком.

Поддерживает программный доступ со статусом "только для чтения" к файловой системе и Web-страницам, индексируемых службой Microsoft Indexing Service.
Microsoft Active Directory Service Interfaces (ADSI) Provider "Provider=ADSDSOObject;User ID=userName;Password=userPassword;"

to connect to heterogeneous directory services through ADSI. This gives ADO applications read-only access to the Microsoft Windows NT® 4.0 and Microsoft Windows 2000 directory services, in addition to any LDAP-compliant directory service and Novell Directory Services. ADSI itself is based on a provider model, so if there is a new provider giving access to another directory, the ADO application will be able to access it seamlessly.

Позволяет связаться с гетерогенными службами каталогов - Windows NT 4.0, Windows 2000, Novell Directory Services, LDAP Directory Services.

Microsoft Cursor Service for OLE DB Строки соединения нет, поскольку это специальная служба, вызываемая автоматически в зависимости от расположения курсора. Эта специальная служба обеспечивает функции поддержки курсора для различных Провайдеров данных, что обеспечивает единую функциональность в работе ADO. Вызывается служба автоматически, если соответствующим образом задать положение курсора объектов Connection или Recordset:
connection.CursorLocation=adUseClient
recordset.CursorLocation=adUseClient
Ольга Гафарова
Ольга Гафарова

Добрый день. Подскажите формулы при решении задачи на рис. 2.2 в лекции №2. Закон Ома, какие должны использоваться формулы для I и R

Курс: Основы офисного программирования и документы Excel

Серегй Лушников
Серегй Лушников