Перейти на главную страничку сайта (список статей, файлы для скачивания)
Библиотека ADO (Microsoft ActiveX Data Object) служит для доступа к базам данных различных типов и предоставляет объектный программный интерфейс к интерфейсу OLE DB, который предлагается компанией Microsoft как альтернатива интерфейсу ODBC. Объектная модель ADO реализована на базе технологии COM (Component Object Model).
Библиотека ADO может быть использована в любых средах, которые в состоянии выступить в роли OLE-клиента, например, в MS Office (VBA), 1C:Предприятии, административных скриптах Windows (.vbs и .js) и т.д. Примеры кода в настоящей статье будут приводиться на языке VBScript для административных скриптов Windows. С помощью библиотеки ADO можно обратиться к огромному количеству типов баз данных, например, dBASE, Access, Excel, Oracle, Paradox, MS SQL Server, Sybase, текстовые файлы, FoxPro, Active Directory Service, Microsoft Jet, Interbase, Informix, PostgreSQL, MySQL и т.д., необходимо только наличие установленного соответствующего OLE-провайдера ("драйвера" соответствующего типа базы данных, который устанавливается в систему как правило из дистрибутива этой же базы данных). Примеры кода в настоящей статье будут приводиться только для MS SQL Server, т.к. невозможно объять необъятное. Перечень свойств и методов ADO, приведённый в этой статье, не является исчерпывающим (в некоторых случаях и описание некоторых свойств и методов не является полным). Полное описание объектной модели библиотеки ADO вы можете получить в MSDN или в файле "ADO210.CHM", который входит в поставку MS Office. Однако материала данной статьи достаточно, чтобы начать работать с ADO.
Основными объектами библиотеки ADO являются объекты Connection, Command и Recordset.
Объект Connection обеспечивает создание подключения к источнику данных и эквивалентен текущему сетевому соединению с сервером. Объект Connection предоставляет возможность настройки соединения перед его открытием, установки базы данных по умолчанию, установки и разрыва соединения с источником данных, задания настроек и выполнения команды с помощью метода Execute. Примечание: для выполнения команды можно использовать также метод Execute объекта Command, не прибегая к объекту Connection.
Объект Connection создаётся следующим образом:
Set objConn = CreateObject("ADODB.Connection")
После этого вы можете вызывать и использовать методы и свойства этого объекта для доступа к базам данных:
Описание | |
---|---|
Version | Содержит строку, определяющую версию библиотеки. Только чтение. |
ConnectionString | Определяет параметры подключения к источнику данных. Чтение и запись. Это строка, содержащая несколько параметров, разделённых точкой с запятой. Свойство ConnectionString автоматически получает значение, заданное в качестве одноимённого аргумента метода Open. Свойство ConnectionString доступно для записи только для закрытого соединения. Многочисленные примеры различных строк подключения для различных типов баз данных вы можете найти в Интернете или в документации к соответствующим программным продуктам. |
ConnectionTimeout | Устанавливает или возвращает число секунд ожидания подключения к базе данных. Значение по умолчанию - 15. Используйте это свойство, если возникают проблемы из-за плотного сетевого трафика или загруженности сервера. Если время, указанное в ConnectionTimeout, истекает до открытия подключения, происходит ошибка, и ADO отменяет попытку подключения. Если Вы установите свойство в ноль, ADO будет ждать бесконечно, пока подключение не будет открыто. Удостоверьтесь, что используемый провайдер поддерживает свойство ConnectionTimeout. Свойство доступно для записи только для закрытого соединения. |
CommandTimeout | Устанавливает или возвращает число секунд ожидания выполнения команды. Значение по умолчанию - 30. Чтение и запись. Используйте это свойство, если возникают проблемы из-за плотного сетевого трафика или загруженности сервера. Если время, указанное в CommandTimeout, истекает до завершения выполнения команды, происходит ошибка, и ADO отменяет команду. Если Вы установите свойство в ноль, ADO будет ждать бесконечно, пока команда не будет выполнена. Удостоверьтесь, что используемый провайдер поддерживает свойство CommandTimeout. Установка CommandTimeout объекта Connection никак не связана с установкой свойства CommandTimeout объекта Command. |
Provider | Устанавливает или возвращает строковое значение, которое содержит имя используемого провайдера. По умолчанию - "MSDASQL". Провайдер может быть также установлен содержанием свойства ConnectionString или параметром метода Open. Определение провайдера в более чем одном месте может иметь непредсказуемые результаты. |
DefaultDatabase | Устанавливает или возвращает строковое значение, которое содержит заданную по умолчанию базу данных. Если есть заданная по умолчанию база данных, запросы SQL могут использовать "дисквалифицированный" синтаксис для обращения к объектам в этой базе данных. Чтобы обращаться к объектам из другой базы данных, вы должны "квалифицировать" имена объектов именем этой базы данных. При подключении провайдер записывает заданную по умолчанию базу данных в это свойство. Некоторые провайдеры разрешают только одну такую базу данных на одно подключение, и в этом случае вы не сможете изменить это свойство. Некоторые источники данных и провайдеры могут не поддерживать это свойство, генерируя ошибку или возвращая пустую строку. |
CursorLocation | Определяет расположение курсора, т.е. место, где выполняется работа с данными. Возможные значения:
|
Mode | Определяет режим доступа для изменения данных в сеансе. Возможные значения:
|
Errors | Содержит коллекцию объектов Error. Любая инструкция, использующая объекты ADO, может сгенерировать одну или более ошибок провайдера. Когда происходит ошибка, в эту коллекцию могут быть помещены один или более объектов Error. Если следующая подобная инструкция также сгенерирует ошибку, коллекция будет очищена и заполнена заново. Каждый объект Error представляет определённую ошибку провайдера, но не ошибку ADO (ошибки ADO подвергаются механизму обработки исключительных ситуаций). Используйте метод Clear, чтобы вручную очистить коллекцию Errors. Некоторые свойства и методы возвращают предупреждения, которые появляются как объекты Error в коллекции Errors, при этом не останавливая выполнение программы. Перед тем, как вы вызываете методы Resync, UpdateBatch или CancelBatch объекта Recordset, метод Open объекта Connection, или устанавливаете свойство Filter объекта Recordset, вызовите метод Clear коллекции Errors. После этого вы можете прочитать свойство Count коллекции Errors, чтобы проверить возвращенные предупреждения. |
State | Содержит состояние объекта. Только чтение. Свойство State может принимать следующие значения:
|
Properties | Содержит коллекцию динамических свойств соединения (объектов Property). Подробнее - см. раздел "Динамические свойства объектов". |
Open(ConnectionString, UserID, Password, Options) | Открывает сеанс подключения к источнику данных. Параметры:
|
Close() | Закрывает соединение с источником данных. Закрытие объекта не приводит к удалению его из памяти. Можно изменить свойства объекта, а затем открыть его снова. При закрытии подключения закрываются также все активные наборы записей (объекты Recordset) для данного подключения. Объекты Command, связанные с данным подключением, уже не будут связаны с данным объектом Connection. Закрытие объекта Connection во время транзакции генерирует ошибку и ADO автоматически откатывает транзакцию. |
Execute(CommandText, RecordsAffected, Options) | Выполняет запрос, оператор SQL, хранимую процедуру или любую другую команду, доступную провайдеру. Возвращает
объект Recordset, доступный только для чтения курсором Forward-only, если переданная команда возвращает записи.
(Если нужен объект Recordset, доступный для записи, следует создать его непосредственно, и воспользоваться его
свойствами и методами.) Параметры:
|
Cancel() | Отменяет выполнение последнего асинхронного вызова Execute() или Open(), если действие ещё не завершено. |
ConnectComplete(pError, adStatus, pConnection) | Событие возникает после того, как осуществлено подключение к источнику данных. Параметры:
|
Disconnect(adStatus, pConnection) | Событие возникает после того, как прервано подключение к источнику данных. Параметры аналогичны параметрам события ConnectComplete. |
InfoMessage(pError, adStatus, pConnection) | Событие возникает каждый раз, когда генерируется предупреждение (warning). Параметры аналогичны параметрам события ConnectComplete. |
WillConnect(ConnectionString, UserID, Password, Options, adStatus, pConnection) | Событие возникает перед тем, как осуществлено подключение к источнику данных. Параметры в основном аналогичны параметрам события ConnectComplete. Options - целое число (long), которое указывает способ подключения - adAsyncConnect(16) или adConnectUnspecified(-1). В обработчике события можно изменять параметры подключения. |
WillExecute(Source, CursorType, LockType, Options, adStatus, pCommand, pRecordset, pConnection) | Событие возникает перед выполнением команды. Параметры:
|
ExecuteComplete(RecordsAffected, pError, adStatus, pCommand, pRecordset, pConnection) | Событие происходит после завершения работы команды. Параметр RecordsAffected - целое число (long) - содержит количество записей, которые затрагивает команда. Остальные параметры аналогичны одноимённым параметрам описанных выше других событий. Событие ExecuteComplete может произойти вследствие вызовов Connection.Execute, Command.Execute, Recordset.Open, Recordset.Requery или Recordset.NextRecordset. |
BeginTrans() CommitTrans() RollbackTrans() |
Вызов метода BeginTrans начинает новую транзакцию. Провайдеры, которые поддерживают вложенные транзакции,
при вызове метода BeginTrans в пределах открытой транзакции начинают новую, вложенную транзакцию. Возвращаемое
методом BeginTrans значение указывает уровень вложения: возвращаемое значение "1" указывает, что вы открыли
транзакцию верхнего уровня (то есть транзакция не вложена в пределах другой транзакции), "2" указывает, что вы
открыли транзакцию второго уровня (транзакция, вложенная в пределах транзакции верхнего уровня), и т.д.
Вызов метода CommitTrans сохраняет изменения, сделанные в пределах открытой транзакции и завершает транзакцию. Вызов метода RollbackTrans полностью отменяет любые изменения, сделанные в пределах открытой транзакции и завершает транзакцию. Вызов любого из этих методов в момент, когда нет никакой открытой транзакции, генерирует ошибку. Вызовы методов CommitTrans или RollbackTrans затрагивают только последнюю открытую транзакцию; вы должны закрыть или откатить текущую транзакцию прежде, чем разрешить любые высокоуровневые транзакции. |
BeginTransComplete(TransactionLevel, pError, adStatus, pConnection) CommitTransComplete(pError, adStatus, pConnection) RollbackTransComplete(pError, adStatus, pConnection) |
Эти события вызываются после того, как заканчивает выполняться соответствующая операция (по работе с транзакциями) на объекте Connection. |
OpenSchema(QueryType, Criteria, SchemaID) | Получает информацию схемы базы данных от провайдера. Возвращает объект Recordset. Recordset будет открыт как
статический курсор только для чтения. Параметры:
|
Объект Error содержит информацию об ошибках доступа к данным, которые принадлежат отдельной операции провайдера. Вы
можете обратиться к свойствам объекта Error, чтобы получить информацию о каждой ошибке:
Описание | |
---|---|
Description | Содержит строку, определяющую короткое описание ошибки. Это свойство по умолчанию. |
Number | Содержит уникальный код, определяющий тип ошибки (целое число). |
Source | Идентифицирует имя объекта, который вызвал ошибку (строка). |
SQLState | Содержит строку из пяти символов, которая указывает код ошибки по стандарту SQL ANSI. |
NativeError | Содержит определённый провайдером код ошибки (целое число). |
Подключаемся к базе данных и выполняем запрос с помощью объекта Connection:
Set objConn = CreateObject("ADODB.Connection")
'Определяем параметры подключения к базе данных
ServerName = "(local)" 'имя или IP-адрес сервера
DSN = "master" 'имя базы данных
UID = "sa" 'логин пользователя SQL-сервера
PWD = "111" 'пароль пользователя SQL-сервера
ConnectString = "Provider=SQLOLEDB;" & _
"Data Source=" & ServerName & _
";Initial Catalog=" & DSN & _
";UID=" & UID & ";PWD=" & PWD
objConn.ConnectionString = ConnectString
objConn.ConnectionTimeOut = 15
objConn.CommandTimeout = 30
'Подключаемся к базе данных
objConn.Open
'Выполняем запрос
Set objRecordset = objConn.Execute("SELECT name, filename FROM sysdatabases")
'Перебираем результаты запроса
While Not objRecordset.EOF
strRes = vbNullString
For i=0 To objRecordset.Fields.Count-1
strRes = strRes & CStr(objRecordset.Fields(i).Value) & vbTab
Next
WScript.Echo Trim(strRes)
objRecordset.MoveNext
Wend
'Закрываем соединение
objConn.Close
Set objConn = Nothing
Set objRecordset = Nothing
Работаем с ошибками провайдера:
Set objConn = CreateObject("ADODB.Connection")
'Определяем параметры подключения к базе данных
ServerName = "(local)" 'имя или IP-адрес сервера
DSN = "master" 'имя базы данных
UID = "sa" 'логин пользователя SQL-сервера
PWD = "111" 'пароль пользователя SQL-сервера
ConnectString = "Provider=SQLOLEDB;" & _
"bla-bla-bla=bla-bla-bla;" & _
"Data Source=" & ServerName & _
";Initial Catalog=" & DSN & _
";UID=" & UID & ";PWD=" & PWD
objConn.ConnectionString = ConnectString
'Подключаемся к базе данных
objConn.Open
'Перебираем коллекцию ошибок
For Each E in objConn.Errors
WScript.Echo "Error.Description: " & E.Description
WScript.Echo "Error.Number: " & E.Number
WScript.Echo "Error.Source: " & E.Source
WScript.Echo "Error.SQLState: " & E.SQLState
WScript.Echo "Error.NativeError: " & E.NativeError
WScript.Echo
Next
'Закрываем соединение
objConn.Close
Set objConn = Nothing
Пример асинхронного подключения и обработки событий:
Set objConn = WScript.CreateObject("ADODB.Connection", "Connection_")
'Определяем параметры подключения к базе данных
ServerName = "(local)" 'имя или IP-адрес сервера
DSN = "master" 'имя базы данных
UID = "sa" 'логин пользователя SQL-сервера
PWD = "111" 'пароль пользователя SQL-сервера
ConnectString = "Provider=SQLOLEDB" & _
";bla-bla=bla-bla" & _
";Data Source=" & ServerName & _
";Initial Catalog=" & DSN & _
";UID=" & UID & ";PWD=" & PWD
WScript.Echo "Подключаемся к базе данных (асинхронно)..."
objConn.Open ,,,16
WScript.Echo "objConn.State = " & objConn.State
WScript.Echo "Спим две секунды..."
WScript.Sleep 2000
WScript.Echo "Закончили спать."
WScript.Echo "Закрываем соединение..."
objConn.Close
WScript.Echo "Снова подключаемся к базе данных (асинхронно)..."
objConn.Open ,,,16
WScript.Echo "objConn.State = " & objConn.State
WScript.Echo "Отменяем соединение..."
objConn.Cancel
Set objConn = Nothing
Set objRecordset = Nothing
'************************************************
Function Connection_WillConnect(ConnectionString, UserID, _
Password, Options, adStatus, pConnection)
pConnection.ConnectionString = ConnectString
WScript.Echo "WillConnect event: pConnection.State = " & pConnection.State
End Function
Function Connection_ConnectComplete(pError, adStatus, pConnection)
WScript.Echo "ConnectComplete event: pConnection.State = " & pConnection.State
End Function
Function Connection_Disconnect(adStatus, pConnection)
WScript.Echo "Disconnect event: pConnection.State = " & pConnection.State
End Function
Function Connection_InfoMessage(pError, adStatus, pConnection)
WScript.Echo "InfoMessage event: pError.Description = " & pError.Description
End Function
Пример асинхронного выполнения запроса и обработки событий:
Set objConn = WScript.CreateObject("ADODB.Connection", "Connection_")
'Определяем параметры подключения к базе данных
ServerName = "(local)" 'имя или IP-адрес сервера
DSN = "master" 'имя базы данных
UID = "sa" 'логин пользователя SQL-сервера
PWD = "111" 'пароль пользователя SQL-сервера
ConnectString = "Provider=SQLOLEDB;" & _
"Data Source=" & ServerName & _
";Initial Catalog=" & DSN & _
";UID=" & UID & ";PWD=" & PWD
objConn.ConnectionString = ConnectString
'Подключаемся к базе данных
objConn.Open
'Выполняем запрос (асинхронно)
Set objRecordset = objConn.Execute("SELECT name, filename FROM sysdatabases",,16)
'Ждём, пока выполнится запрос
While objConn.State <> 1
WScript.Sleep 500
Wend
'Закрываем соединение
objConn.Close
Set objConn = Nothing
Set objRecordset = Nothing
'************************************************
Function Connection_ExecuteComplete(RecordsAffected, pError, adStatus, _
pCommand, pRecordset, pConnection)
'Перебираем результаты запроса
While Not pRecordset.EOF
strRes = vbNullString
For i=0 To pRecordset.Fields.Count-1
strRes = strRes & CStr(pRecordset.Fields(i).Value) & vbTab
Next
WScript.Echo Trim(strRes)
pRecordset.MoveNext
Wend
End Function
'************************************************
Function Connection_WillExecute(strSource, CursorType, LockType, Options, _
adStatus, pCommand, pRecordset, pConnection)
CursorType = 2
LockType = 2
WScript.Echo "WillExecute event: CursorType = " & CursorType
WScript.Echo "WillExecute event: LockType = " & LockType
WScript.Echo "WillExecute event: Options = " & Options
End Function
Пример работы с транзакциями:
Set objConn = WScript.CreateObject("ADODB.Connection", "Connection_")
'Определяем параметры подключения к базе данных
ServerName = "(local)" 'имя или IP-адрес сервера
DSN = "master" 'имя базы данных
UID = "sa" 'логин пользователя SQL-сервера
PWD = "111" 'пароль пользователя SQL-сервера
ConnectString = "Provider=SQLOLEDB;" & _
"Data Source=" & ServerName & _
";Initial Catalog=" & DSN & _
";UID=" & UID & ";PWD=" & PWD
objConn.ConnectionString = ConnectString
'Подключаемся к базе данных
objConn.Open
'Начинаем транзакцию
objConn.BeginTrans
'Создаём таблицу
Set objRecordset = objConn.Execute("CREATE TABLE newTable (newColumn INT PRIMARY KEY)")
'Откатываем транзакцию
objConn.RollbackTrans
'Закрываем соединение
objConn.Close
Set objConn = Nothing
Set objRecordset = Nothing
'************************************************
Function Connection_BeginTransComplete(TransactionLevel, pError, _
adStatus, pConnection)
WScript.Echo "BeginTransComplete event: TransactionLevel = " & TransactionLevel
End Function
'************************************************
Function Connection_CommitTransComplete(pError, adStatus, pConnection)
WScript.Echo "CommitTransComplete event"
End Function
'************************************************
Function Connection_RollbackTransComplete(pError, adStatus, pConnection)
WScript.Echo "RollbackTransComplete event"
End Function
Пример работы с методом OpenSchema:
Set objConn = CreateObject("ADODB.Connection")
'Определяем параметры подключения к базе данных
ServerName = "(local)" 'имя или IP-адрес сервера
DSN = "master" 'имя базы данных
UID = "sa" 'логин пользователя SQL-сервера
PWD = "111" 'пароль пользователя SQL-сервера
ConnectString = "Provider=SQLOLEDB;" & _
"Data Source=" & ServerName & _
";Initial Catalog=" & DSN & _
";UID=" & UID & ";PWD=" & PWD
objConn.ConnectionString = ConnectString
'Подключаемся к базе данных
objConn.Open
'Получаем данные о столбцах таблиц, которые являются доступными для
'данного пользователя. Фильтруем по базе данных "pubs", таблице "authors".
Set objRecordset = objConn.OpenSchema(4, Array("pubs", "dbo", "authors"))
'Перебираем результаты запроса
While Not objRecordset.EOF
strRes = vbNullString
For i=0 To objRecordset.Fields.Count-1
If IsNull(objRecordset.Fields(i).Value) Then
strRes = strRes & "NULL" & vbTab
Else
strRes = strRes & CStr(objRecordset.Fields(i).Value) & vbTab
End If
Next
WScript.Echo Trim(strRes)
objRecordset.MoveNext
Wend
'Закрываем соединение
objConn.Close
Set objConn = Nothing
Set objRecordset = Nothing
Объекты Connection, Command, Recordset, Parameter и Field имеют встроенную коллекцию Properties, содержащую объекты Property. Коллекция имеет следующие свойства и методы:
Описание | |
---|---|
Name | Содержит имя свойства (строка). |
Type | Содержит тип свойства. Может принимать значения перечисления DataTypeEnum (подробнее - см. MSDN, а также свойство Type объекта Parameter в данной статье). |
Value | Содержит значение свойства. |
Attributes | Содержит одну или несколько характеристик свойства - сумму одной или более констант:
|
Вы можете изменять значения (Value) этих свойств, но не их характеристики (Attributes). Вы не можете удалить такое свойство.
Чтение коллекции Properties:
Set objConn = CreateObject("ADODB.Connection")
'Определяем параметры подключения к базе данных
ServerName = "(local)" 'имя или IP-адрес сервера
DSN = "master" 'имя базы данных
UID = "sa" 'логин пользователя SQL-сервера
PWD = "111" 'пароль пользователя SQL-сервера
ConnectString = "Provider=SQLOLEDB;" & _
"Data Source=" & ServerName & _
";Initial Catalog=" & DSN & _
";UID=" & UID & ";PWD=" & PWD
objConn.ConnectionString = ConnectString
'Подключаемся к базе данных
objConn.Open
'Перебираем коллекцию динамических свойств
i=1
For Each Prop in objConn.Properties
WScript.Echo i
WScript.Echo "Property.Name: " & Prop.Name
WScript.Echo "Property.Type: " & Prop.Type
WScript.Echo "Property.Value: " & Prop.Value
WScript.Echo "Property.Attributes: " & Prop.Attributes
If (Prop.Attributes And 1) = 1 Then
WScript.Echo "необходимо задать значение свойства перед инициализацией источника данных: ДА"
Else
WScript.Echo "необходимо задать значение свойства перед инициализацией источника данных: НЕТ"
End If
If (Prop.Attributes And 2) = 2 Then
WScript.Echo "не требуется задавать значение свойства перед инициализацией источника данных: ДА"
Else
WScript.Echo "не требуется задавать значение свойства перед инициализацией источника данных: НЕТ"
End If
If (Prop.Attributes And 512) = 512 Then
WScript.Echo "свойство доступно для чтения: ДА"
Else
WScript.Echo "свойство доступно для чтения: НЕТ"
End If
If (Prop.Attributes And 1024) = 1024 Then
WScript.Echo "свойство доступно для записи: ДА"
Else
WScript.Echo "свойство доступно для записи: НЕТ"
End If
WScript.Echo
i=i+1
Next
'Закрываем соединение
objConn.Close
Set objConn = Nothing
Смена текущей базы данных с помощью коллекции Properties:
Set objConn = CreateObject("ADODB.Connection")
'Определяем параметры подключения к базе данных
ServerName = "(local)" 'имя или IP-адрес сервера
DSN = "master" 'имя базы данных
UID = "sa" 'логин пользователя SQL-сервера
PWD = "111" 'пароль пользователя SQL-сервера
ConnectString = "Provider=SQLOLEDB;" & _
"Data Source=" & ServerName & _
";Initial Catalog=" & DSN & _
";UID=" & UID & ";PWD=" & PWD
objConn.ConnectionString = ConnectString
objConn.ConnectionTimeOut = 15
objConn.CommandTimeout = 30
'Подключаемся к базе данных
objConn.Open
'Выполняем запрос
Set objRecordset = objConn.Execute("SELECT name, filename FROM sysdatabases")
'Перебираем результаты запроса
While Not objRecordset.EOF
strRes = vbNullString
For i=0 To objRecordset.Fields.Count-1
strRes = strRes & CStr(objRecordset.Fields(i).Value) & vbTab
Next
WScript.Echo Trim(strRes)
objRecordset.MoveNext
Wend
WScript.Echo
'Меняем текущую базу данных
objConn.Properties("Current Catalog").Value = "pubs"
'Выполняем запрос
Set objRecordset = objConn.Execute("SELECT au_lname, au_fname FROM authors")
'Перебираем результаты запроса
While Not objRecordset.EOF
strRes = vbNullString
For i=0 To objRecordset.Fields.Count-1
strRes = strRes & CStr(objRecordset.Fields(i).Value) & vbTab
Next
WScript.Echo Trim(strRes)
objRecordset.MoveNext
Wend
'Закрываем соединение
objConn.Close
Set objConn = Nothing
Set objRecordset = Nothing
Объект Command создаётся следующим образом:
Set objComm = CreateObject("ADODB.Command")
После этого вы можете вызывать и использовать методы и свойства этого объекта.
Объект Command существует для задания и выполнения команд и запросов. Хотя запрос можно выполнить и без использования объекта Command (с помощью метода Execute объекта Connection или метода Open объекта Recordset), объект Command незаменим при выполнении запроса с параметрами и удобен в случае, когда требуется сохранить текст команды для её повторного использования. Объект Command может быть использован как в паре с объектом Connection, так и без него, т.к. строку подключения можно задать непосредственно в свойстве ActiveConnection объекта Command.
Свойства и методы объекта Command:
Описание | |
---|---|
ActiveConnection | Определяет объект Connection, с которым связан данный объект Command. Значением этого свойства может быть и строка, содержащая ту же информацию, что и свойство ConnectionString объекта Connection. Попытка выполнить метод Execute объекта Command при незаданном свойстве ActiveConnection приведёт к ошибке. Назначение закрытого объекта Connection в качестве значения свойства ActiveConnection также вызовет ошибку (объект должен быть открыт). Закрытие объекта Connection, с которым связан объект Command, устанавливает свойство ActiveConnection в Nothing. |
CommandText | Строка, определяющая текст команды, например, оператор SQL, имя таблицы или вызов хранимой процедуры. В зависимости от установки свойства CommandType, ADO может автоматически изменить свойство CommandText. |
CommandTimeout | Устанавливает или возвращает число секунд ожидания выполнения команды. Значение по умолчанию - 30. Чтение и запись. Используйте это свойство, если возникают проблемы из-за плотного сетевого трафика или загруженности сервера. Если время, указанное в CommandTimeout, истекает до завершения выполнения команды, происходит ошибка, и ADO отменяет команду. Если Вы установите свойство в ноль, ADO будет ждать бесконечно, пока команда не будет выполнена. Удостоверьтесь, что используемый провайдер поддерживает свойство CommandTimeout. Установка CommandTimeout объекта Connection никак не связана с установкой свойства CommandTimeout объекта Command. |
CommandType | Определяет тип команды. Возможные значения:
|
Prepared | Указывает, сохранить ли откомпилированную версию команды перед первым выполнением (true или false). Это может замедлить первое выполнение команды, но ускорит любое последующее выполнение. Если провайдер не поддерживает компиляцию команды, при установке этого свойства в true может произойти ошибка (или автоматическая установка в false). |
State | Содержит состояние объекта. Только чтение. Возможные значения:
|
Properties | Содержит коллекцию динамических свойств объекта (объектов Property). Подробнее - см. раздел "Динамические свойства объектов". |
Parameters | Содержит коллекцию параметров объекта (объектов Parameter). Использование метода Refresh() этой коллекции
отыскивает информацию параметров для хранимой процедуры или параметрического запроса. Некоторые провайдеры
не поддерживают хранимые процедуры или параметрические запросы; в этом случае вызов метода Refresh() вызовет
ошибку. Перед вызовом метода Refresh() вы должны правильно установить значения свойств ActiveConnection, CommandText
и CommandType. Если вы обращаетесь к коллекции перед вызовом метода Refresh(), ADO автоматически вызовет его и
заполнит коллекцию. Коллекция параметров имеет следующие свойства и методы:
|
NamedParameters | Указывает, нужно ли передавать провайдеру имена параметров. Булево (по умолчанию - ложь). Если это свойство установлено в True, ADO передаёт значение имени каждого параметра в коллекции параметров. Провайдер использует имя параметра, чтобы установить соответствие параметрам в свойстве CommandText. Если это свойство установлено в ложь, имена параметров игнорируются, и провайдер использует порядок параметров, чтобы установить соответствие параметрам в свойстве CommandText. |
Execute(RecordsAffected, Parameters, Options) | Выполняет запрос, оператор SQL, хранимую процедуру или любую другую команду, доступную провайдеру. В основном аналогичен методу Execute() объекта Connection (см. выше). Все параметры являются необязательными. Параметр "Parameters" представляет собой массив параметров типа Variant, передаваемый оператору SQL (не для выходных параметров). |
Cancel() | Отменяет выполнение последнего асинхронного вызова Execute(), если действие ещё не завершено. |
CreateParameter(Name, Type, Direction, Size, Value) | Создаёт и возвращает объект Parameter с заданными свойствами. Метод CreateParameter не добавляет созданный
параметр к коллекции Parameters. Для этого следует использовать метод Append(objParameter) этой коллекции.
Аргументы метода CreateParameter (все аргументы необязательные):
|
Объект Parameter является членом коллекции Parameters и представляет собой параметр запроса с параметрами
(например, критерий сравнения предложения WHERE оператора SELECT) или параметр хранимой процедуры. В зависимости
от функциональных возможностей провайдера некоторые методы или свойства объекта Parameter могут быть недоступны.
Если вы знаете имена и свойства параметров, связанных с хранимой процедурой или параметризованным запросом, вы
можете использовать метод CreateParameter для создания объектов Parameter и метод Append() для добавления их к
коллекции параметров. Это позволит вам не вызывать метод Refresh() коллекции параметров, чтобы отыскать информацию
о параметрах с помощью провайдера (потенциально ресурсоёмкая операция). Свойства и методы объекта Paramrter:
Описание | |
---|---|
Name | Строка, имя параметра. Для объектов Parameter, ещё не добавленных в коллекцию параметров, это свойство доступно для чтения и записи, в противном случае - только для чтения. |
Value | Variant, значение параметра. Если команда содержит параметр, свойство Value которого пусто, и вы получаете от команды объект Recordset, вы должны закрыть Recordset перед чтением свойства Value. Иначе (для некоторых провайдеров) свойство Value может не содержать правильное значение. |
Attributes | Содержит сумму одной или более характеристик объекта (целое число, long). Чтение и запись. Возможные значения:
|
Direction | Целое число (long), "направление" параметра. Возможные значения - см. описание метода CreateParameter объекта Command. Не все провайдеры могут определить направление параметров в их хранимых процедурах. В таких случаях вы должны установить свойство Direction прежде, чем выполните запрос. |
Precision | Указывает степень точности для числовых значений. Целое число (byte), которое указывает максимальное число цифр. |
NumericScale | Указывает масштаб числовых значений. Целое число (byte), которое указывает число десятичных разрядов справа от десятичной точки. |
Size | Целое число (long), максимальная длина параметра в символах или байтах. Во многих случаях во избежание ошибок крайне желательно заполнить этот параметр. |
Type | Целое число (long), тип данных параметра (строка, число, булево и т.д.). Подробнее - см. в MSDN значения
перечисления DataTypeEnum. Некоторые возможные значения:
|
AppendChunk(Data) | Добавляет данные в конец большого текста или двоичных данных. Параметр Data имеет тип Variant. В ситуациях, когда системная память ограничена, вы можете использовать метод AppendChunk для управления большими значениями по частям. Первый вызов AppendChunk() перезаписывает новые данные поверх любых существующих данных. Последующие вызовы AppendChunk() добавляют данные к существующим данным параметра. Вызов AppendChunk() с пустым значением удаляет все данные параметра. |
Properties | Содержит коллекцию динамических свойств объекта (объектов Property). Подробнее - см. раздел "Динамические свойства объектов". |
Пример "независимого" использования объекта Command:
Set objComm = CreateObject("ADODB.Command")
ServerName = "(local)" 'имя или IP-адрес сервера
DSN = "master" 'имя базы данных
UID = "sa" 'логин пользователя SQL-сервера
PWD = "111" 'пароль пользователя SQL-сервера
ConnectString = "Provider=SQLOLEDB;" & _
"Data Source=" & ServerName & _
";Initial Catalog=" & DSN & _
";UID=" & UID & ";PWD=" & PWD
objComm.ActiveConnection = ConnectString
objComm.CommandText = "SELECT name, filename FROM sysdatabases"
Set objRecordset = objComm.Execute
While Not objRecordset.EOF
strRes = vbNullString
For i=0 To objRecordset.Fields.Count-1
strRes = strRes & CStr(objRecordset.Fields(i).Value) & vbTab
Next
WScript.Echo Trim(strRes)
objRecordset.MoveNext
Wend
Set objComm = Nothing
Set objRecordset = Nothing
Пример использования объекта Command в паре с объектом Connection:
Set objConn = CreateObject("ADODB.Connection")
Set objComm = CreateObject("ADODB.Command")
ServerName = "(local)" 'имя или IP-адрес сервера
DSN = "master" 'имя базы данных
UID = "sa" 'логин пользователя SQL-сервера
PWD = "111" 'пароль пользователя SQL-сервера
ConnectString = "Provider=SQLOLEDB;" & _
"Data Source=" & ServerName & _
";Initial Catalog=" & DSN & _
";UID=" & UID & ";PWD=" & PWD
objConn.ConnectionString = ConnectString
objConn.Open
objComm.ActiveConnection = objConn
objComm.CommandText = "SELECT name, filename FROM sysdatabases"
Set objRecordset = objComm.Execute
While Not objRecordset.EOF
strRes = vbNullString
For i=0 To objRecordset.Fields.Count-1
strRes = strRes & CStr(objRecordset.Fields(i).Value) & vbTab
Next
WScript.Echo Trim(strRes)
objRecordset.MoveNext
Wend
objConn.Close
Set objConn = Nothing
Set objComm = Nothing
Set objRecordset = Nothing
Пример получения информации о параметрах хранимой процедуры:
Set objComm = CreateObject("ADODB.Command")
ServerName = "(local)" 'имя или IP-адрес сервера
DSN = "master" 'имя базы данных
UID = "sa" 'логин пользователя SQL-сервера
PWD = "111" 'пароль пользователя SQL-сервера
ConnectString = "Provider=SQLOLEDB;" & _
"Data Source=" & ServerName & _
";Initial Catalog=" & DSN & _
";UID=" & UID & ";PWD=" & PWD
objComm.ActiveConnection = ConnectString
'получаем информацию о параметрах хранимой процедуры "sp_adduser"
objComm.CommandText = "sp_adduser"
objComm.CommandType = 4
For Each Param In objComm.Parameters
WScript.Echo "Name = " & Param.Name
WScript.Echo "Attributes = " & Param.Attributes
WScript.Echo "Direction = " & Param.Direction
WScript.Echo "Size = " & Param.Size
WScript.Echo "Type = " & Param.Type
WScript.Echo
Next
Set objComm = Nothing
Пример исполнения хранимой процедуры с параметрами - упаковка файла в CAB-архив средствами SQL-сервера:
Set objComm = CreateObject("ADODB.Command")
ServerName = "(local)" 'имя или IP-адрес сервера
DSN = "master" 'имя базы данных
UID = "sa" 'логин пользователя SQL-сервера
PWD = "111" 'пароль пользователя SQL-сервера
ConnectString = "Provider=SQLOLEDB;" & _
"Data Source=" & ServerName & _
";Initial Catalog=" & DSN & _
";UID=" & UID & ";PWD=" & PWD
objComm.ActiveConnection = ConnectString
'упаковка файла "C:\boot.ini" в cab-архив
objComm.CommandText = "xp_makecab"
objComm.CommandType = 4
objComm.Parameters.Append objComm.CreateParameter(,129,,11,"C:\boot.cab")
objComm.Parameters.Append objComm.CreateParameter(,129,,5,"mszip")
objComm.Parameters.Append objComm.CreateParameter(,17,,,0)
objComm.Parameters.Append objComm.CreateParameter(,129,,11,"C:\boot.ini")
objComm.Execute
Set Param = Nothing
Set objComm = Nothing
Объект Recordset создаётся следующим образом:
Set objConn = CreateObject("ADODB.Recordset")
После этого вы можете вызывать и использовать методы и свойства этого объекта. Объект Recordset состоит из записей
и полей. Не все свойства объекта поддерживаются всеми провайдерами.
При открытии набора записей (Recordset'а) вы должны определить тип используемого курсора. В библиотеке ADO определены четыре типа курсоров:
Чтобы открыть набор записей в одном из рассмотренных четырёх режимов, необходимо задать соответствующее значение свойству CursorType или параметру CursorType метода Open. Не все провайдеры поддерживают все типы курсоров. По умолчанию используется курсор типа Forward-only.
При открытии объекта Recordset текущей записью становится первая запись, а свойства EOF и BOF получают значение False.
Объект Recordset предусматривает два типа обновлений: немедленное и пакетное. В первом случае все изменения данных немедленно записываются в базу после вызова метода Update(). Во втором случае (если тип блокировки для Recordset - adLockBatchOptimistic(4), режим обновления будет пакетным) несколько обновлённых строк может помещаться в локальный буфер, после чего реализуется одновременное обновление нескольких полей источника данных с помощью метода UpdateBatch().
Свойства и методы объекта Recordset:
Описание | |
---|---|
ActiveConnection | Содержит объект Connection, к которому привязан данный Recordset, или строку параметров подключения (ConnectionString). |
ActiveCommand | Содержит объект Command, который породил данный Recordset. Только чтение. Если объект Command не использовался, пусто. |
Source | Содержит источник данных объекта Recordset. Это ссылка на объект Command, оператор SQL, имя таблицы или хранимой процедуры. Свойству можно задать значение только при закрытом в данный момент объекте Recordset. |
Filter | Содержит фильтр данных. Может принимать значения трёх типов:
|
CursorType | Содержит тип курсора. Может быть изменено только до открытия объекта Recordset. Возможные значения - см. описание аргумента CursorType события WillExecute объекта Connection. |
LockType | Содержит тип блокировки для объекта Recordset. Доступно для записи при закрытом объекте Recordset. Возможные значения - см. описание аргумента LockType события WillExecute объекта Connection. |
MaxRecords | Используйте это свойство, чтобы ограничить количество записей, которые возвращает провайдер в результате запроса к источнику данных. По умолчанию - 0, что означает, что провайдер возвращает все требуемые записи. |
State | Содержит состояние объекта. Возможные значения - см. описание свойства State объекта Command. |
CacheSize | Устанавливает количество записей объекта Recordset (обязательно больше 0), которые кэшируются (локально) в памяти. Значение по умолчанию 1. Например, если CacheSize = 10, после открытия объекта Recordset провайдер помещает первые 10 записей в локальную память. По мере того, как вы двигаетесь по записям объекта Recordset, провайдер возвращает данные из локального буфера памяти. Как только вы минуете последнюю запись в кэше, провайдер помещает следующие 10 записей из источника данных в кэш. Записи в кэше не отражают изменения, которые делают другие пользователи. Чтобы вызвать модификацию всех кэшируемых данных, используйте метод Resync(). |
Open(Source, ActiveConnection, CursorType, LockType, Options) | Открывает курсор. Все параметры необязательные. Параметры:
|
Close() | Закрывает объект Recordset. Если вы закрываете объект Recordset в пакетном режиме модификации, все изменения после последнего вызова UpdateBatch() будут потеряны. |
RecordCount | Содержит количество записей в объекте Recordset. Если провайдер или тип курсора не поддерживает данное свойство, содержит -1. |
Requery(Options) | Обновляет данные в объекте Recordset путём повторного выполнения запроса. Эквивалентно вызову Close(), а затем Open(). Возможные значения параметра Options - см. описание аргумента Options метода Open() объекта Recordset. |
Resync(AffectRecords, ResyncValues) | Обновляет данные в объекте Recordset. Не выполняет повторного запроса к базе данных, поэтому вновь добавленные
записи не будут видны. Если существующие записи были удалены из базы данных, произойдёт ошибка. Этот метод обычно
используют со статическим курсором или курсором типа Forward-only, чтобы видеть изменения, внесённые в базу
данных. Параметры (все параметры необязательные):
|
Save(FileName, PersistFormat) | Сохраняет набор записей в файл или объект Stream (не рассматривается в данной статье). Может быть вызван только
для открытого набора записей. После вызова метода текущей становится первая строка набора записей. Параметры (все
параметры необязательные):
|
Clone(LockType) | Возвращает копию исходного объекта Recordset. Необязательный параметр LockType определяет тип блокировки: как у оригинала или только для чтения. Допустимые значения - adLockUnspecified(-1) или adLockReadOnly(1). Использование метода Clone() более эффективно, чем создание и открытие нового объекта Recordset с теми же параметрами. Свойство Filter оригинала не будет применено к клону. Текущей записью только что созданного клона будет первая. Изменения, которые вы делаете в оригинальном объекте Recordset, видимы во всех его клонах независимо от типа курсора. Однако после того, как вы выполните метод Requery() на оригинале, клоны больше не будут синхронизированы с оригиналом. Закрытие оригинала не закрывает копии. Значения закладок (Bookmark) взаимозаменяемы для оригинала и клонов. Некоторые события объекта Recordset (объект Recordset имеет события - в данной статье они не рассматриваются) будут происходить одновременно для всех клонов. Однако, поскольку текущая запись оригинала может отличаться от текущей записи клона, события могут быть неверно обработаны для клона. |
BOF EOF |
Если свойство BOF содержит True, текущая запись (курсор) находится перед первой записью в объекте Recordset. Если свойство EOF содержит True, текущая запись (курсор) находится после последней записи в объекте Recordset. При открытии пустого объекта Recordset оба этих свойства содержат True. |
Move(NumRecords, Start) | Передвигает позицию текущей записи в наборе записей. Параметры:
|
MoveFirst() MoveLast() MoveNext() MovePrevious() |
Передвигают позицию текущей записи соответственно на первую, последнюю, следующую или предыдущую запись. Вызов MoveFirst() в объекте Recordset типа forward-only может заставить провайдера заново выполнить команду, которая сгенерировала этот Recordset. |
AbsolutePosition | При установке перемещает курсор на запись под данным номером. Доступно не для всех видов курсоров. Значение в интервале с 1 по RecordCount. Свойство поддерживается не всеми провайдерами. |
Bookmark | Закладка в виде числа. Доступно не для всех видов курсоров. Никак не связана с номером записи. Можно при проходе по таблице запомнить значение Bookmark во временной переменной, а затем вернуться обратно на данную запись путём установки свойства из этой переменной. Закладка уникально идентифицирует запись. Тип данных закладки определяется провайдером и воспринимается ADO как Variant. |
PageSize | Задаёт число записей на странице. По умолчанию - 10. Доступно не для всех видов курсоров. |
PageCount | Содержит количество страниц. Автоматически пересчитывается при изменении PageSize. Доступно не для всех видов курсоров. |
AbsolutePage | При установке перемещает курсор на начало данной страницы. Доступно не для всех видов курсоров. Значение в интервале с 1 по PageCount. Свойство поддерживается не всеми провайдерами. |
Delete(AffectRecords) | Удаляет текущую запись или группу записей. Если объект Recordset не допускает удаления записей, произойдёт
ошибка. Если вы находитесь в пакетном режиме модификации, фактическое удаление происходит при вызове UpdateBatch().
Вы можете отменить удаление вызовом CancelBatch(). Параметр AffectRecords (необязательный) может принимать
значения:
|
AddNew(Fields, Values) | Добавляет запись с указанными значениями полей в конец объекта Recordset и делает её текущей. Параметры (все
параметры необязательные):
|
Update(Fields, Values) | Сохраняет любые изменения текущей записи объекта Recordset. Параметры (все параметры необязательные):
|
CancelUpdate() | Отменяет любые изменения или добавления записей, проведённые до использования метода Update(). |
UpdateBatch(AffectRecords, PreserveStatus) | Для пакетного режима модификации: записывает все изменения объекта Recordset в базу данных. Только для
курсоров Keyset или Static. Если вызов метода привёл к ошибкам из-за конфликта с основными данными (например,
запись была уже удалена другим пользователем), используйте коллекцию Errors и обрабатывайте ошибки времени
выполнения (run-time errors). Используйте свойства Filter и Status, чтобы определить местонахождение
записей с конфликтами. Чтобы отменить все ожидающие разрешения пакетные модификации, используйте метод
CancelBatch(). Порядок, в котором модификации выполняются на источнике данных, не обязательно тот же,
в котором эти модификации были выполнены в текущем объекте Recordset. Параметры (все параметры необязательные):
|
CancelBatch(AffectRecords) | Отменяет любые ожидающие разрешения модификации в пакетном режиме модификации. Обработка ошибок аналогична методу UpdateBatch(). Необязательный параметр AffectRecords указывает, какие записи затронет метод. Возможные значения - см. описание аргумента AffectRecords метода Resync(). |
Status | Содержит статус текущей записи относительно пакетных модификаций или других объёмных операций. Возможные значения - см. в MSDN описание перечисления RecordStatusEnum. |
SetAllRowStatus(recStatus) | Устанавливает свойство Status всех записей к указанному значению. Единственное допустимое значение аргумента recStatus - adRecNew(1) - указывает, что запись новая. |
EditMode | Содержит состояние редактирования текущей записи (был ли вызван метод Update() или UpdateBatch() для сохранения
изменений). Возможные значения:
|
Cancel() | Отменяет последний асинхронный вызов Open(), если процесс ещё не завершён. |
Fields | Содержит коллекцию полей (объектов Field). Свойства и методы коллекции - см. раздел "Коллекция полей Fields". |
Properties | Содержит коллекцию динамических свойств объекта (объектов Property). Подробнее - см. раздел "Динамические свойства объектов". Доступно для открытого объекта Recordset. |
CursorLocation | Определяет расположение курсора (на сервере или на клиенте). Доступно для установки только до осуществления
подключения к источнику данных. Возможные значения:
|
Sort | Строка, содержащая одно или более имен полей, по которым следует отсортировать Recordset, и порядок сортировки (по возрастанию или по убыванию). Каждое имя поля отделяется запятой и произвольно сопровождается пробелом и ключевым словом ASC, которое сортирует в возрастающем порядке, или DESC, которое сортирует по убыванию. По умолчанию сортировка происходит в возрастающем порядке. Это свойство требует, чтобы свойство CursorLocation было установлено в adUseClient(3). Это свойство имеет приоритет перед предложением ORDER BY, включенным в инструкцию SQL. Установка свойства к пустой строке сбросит строки к их первоначальному порядку. |
CompareBookmarks(Bookmark1, Bookmark2) | Сравнивает относительную позицию двух закладок (см. свойство Bookmark) и возвращает результат сравнения.
Возвращаемые значения:
|
NextRecordset(RecordsAffected) | Используйте этот метод, чтобы получить результаты следующей команды в составной инструкции, которая возвращает множественные результаты. Если вы открываете объект Recordset, основанный на составной инструкции (например, "SELECT * FROM table1; SELECT * FROM table2"), использование метода Open() возвращает результаты только первой команды. Если результатов следующей команды нет, Recordset будет установлен в Nothing. При непосредственном режиме модификации перед использованием метода NextRecordset следует вызвать Update() или CancelUpdate(), т.к. модификации должны быть завершены. Метод возвращает объект Recordset. В необязательном параметре RecordsAffected возвращается число записей, затронутых операцией. |
Supports(CursorOptions) | Определяет, поддерживает ли текущий курсор Recordset специфический тип функциональных возможностей и возвращает
булево значение. Параметр CursorOptions состоит из одного или более значений:
|
Find(Criteria, SkipRows, SearchDirection, Start) | Ищет в Recordset строку, которая удовлетворяет указанным критериям. Если строка найдена, она становится
текущей. Иначе, текущая позиция устанавливается на конец (или начало) Recordset. Перед вызовом метода текущая
позиция должна быть установлена. Параметры:
|
GetRows(Rows, Start, Fields) | Помещает записи объекта Recordset в массив. Возвращает двумерный массив. Параметры:
|
GetString(StringFormat, NumRows, ColumnDelimiter, RowDelimiter, NullExpr) | Возвращает Recordset как строку. Параметры:
|
Коллекция полей Fields является свойством объекта Recordset и поддерживает следующие свойства и методы:
Описание | |
---|---|
Count | Содержит количество объектов в коллекции. |
Item(index) | Возвращает элемент коллекции по имени или порядковому номеру. |
Append(Name, Type, DefinedSize, Attrib) | Создаёт и добавляет новый объект Field в коллекцию. Поля следует добавлять к закрытому Recordset'у. Параметры:
|
Delete(Field) | Удаляет объект Field из коллекции, что соответствует удалению поля из набора записей. Параметр Field задаёт имя объекта Field или его порядковый номер. Метод может использоваться только для закрытого набора записей. |
Объект Field представляет собой столбец данных одного типа, т.е. поле набора записей. Кроме того, объект Field
может представлять собой поле единичной записи (объекта Record, который не рассматривается в данной статье).
Свойства объекта Field:
Описание | |
---|---|
Name | Содержит имя поля. |
Value | Содержит значение поля. |
OriginalValue | Содержит значение поля после последнего вызова Update() или UpdateBatch(). Это то значение, которое используют методы CancelUpdate() и CancelBatch(). |
UnderlyingValue | Содержит текущее значение поля из источника данных. |
DefinedSize | Содержит максимальный размер поля. |
ActualSize | Содержит размер фактического значения поля. |
Type | Содержит тип поля. Возможные значения - см. описание свойства "Type" объекта "Parameter". |
Precision | Содержит степень точности для числовых значений поля (максимальное количество цифр). |
NumericScale | Содержит масштаб числовых значений поля (количество десятичных знаков справа от запятой). |
Properties | Содержит коллекцию динамических свойств объекта (объектов Property). Подробнее - см. раздел "Динамические свойства объектов". |
Пример "независимого" использования объекта Recordset:
Set objRecordset = CreateObject("ADODB.Recordset")
ServerName = "(local)" 'имя или IP-адрес сервера
DSN = "master" 'имя базы данных
UID = "sa" 'логин пользователя SQL-сервера
PWD = "111" 'пароль пользователя SQL-сервера
ConnectString = "Provider=SQLOLEDB;" & _
"Data Source=" & ServerName & _
";Initial Catalog=" & DSN & _
";UID=" & UID & ";PWD=" & PWD
objRecordset.ActiveConnection = ConnectString
objRecordset.Source = "SELECT name, filename FROM sysdatabases"
objRecordset.Open
While Not objRecordset.EOF
strRes = vbNullString
For i=0 To objRecordset.Fields.Count-1
strRes = strRes & CStr(objRecordset.Fields(i).Value) & vbTab
Next
WScript.Echo Trim(strRes)
objRecordset.MoveNext
Wend
objRecordset.Close
Set objRecordset = Nothing
Сохранение данных Recordset в формате XML:
Set objRecordset = CreateObject("ADODB.Recordset")
ServerName = "(local)" 'имя или IP-адрес сервера
DSN = "master" 'имя базы данных
UID = "sa" 'логин пользователя SQL-сервера
PWD = "111" 'пароль пользователя SQL-сервера
ConnectString = "Provider=SQLOLEDB;" & _
"Data Source=" & ServerName & _
";Initial Catalog=" & DSN & _
";UID=" & UID & ";PWD=" & PWD
objRecordset.Open "SELECT name, filename FROM sysdatabases", ConnectString
objRecordset.Save "C:\test.xml", 1
objRecordset.Close
Set objRecordset = Nothing
Людоговский Александр
Перейти на главную страничку сайта (список статей, файлы для скачивания)
© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.