Драйвер ODBC SQL Server

Новые характеристики

Введение

Системные требования

Установка

Источники данных SQL Server

Подключение к источнику данных

Атрибуты драйвера SQL Server (возвращаемые значения функции SQLGetInfo)

Поддержка языка SQL

Типы данных

Использование указателей наборов записей ODBC

Сообщения об ошибках

Функции

Реализация драйвера

Словарь терминов

Справочники


Установка

Установка драйвера SQL Server

Обновление каталога сохраненных процедур


Источники данных SQL Server

Установка ODBC SQL Server

Удаление источника данных

Смена источников данных с помощью функции SQLConfigDataSource


Подключение к источнику данных

Подключение к источнику данных SQL Server

SQLConnect

SQLDriverConnect

SQLBrowseConnect

Параметры подключения, определяемые драйвером


Поддержка языка SQL

Грамматические ограничения SQL

Не поддерживаемые элементы грамматики ODBC SQL

Разрешение вопросов со значениями Null


Типы данных

Использование типов данных

Сопоставление типов данных

Разрешение вопросов со значениями Null


Использование указателей наборов записей ODBC

Использование указателей наборов записей ODBC

Создание указателей наборов записей

SQLSetStmtOption

SQLSetScrollOptions

SQLSetConnectOption

SQLSetCursorName

SQLGetCursorName

SQLGetStmtOption

SQLGetInfo

Загрузка данных с помощью указателей наборов записей

SQLFetch

SQLExtendedFetch

SQLRowCount

Обновление указателей наборов записей

SQLSetPos

SQLRowCount

Закрытие указателей наборов записей

SQLFreeStmt

SQLTransact


Функции

Реализация функций API ODBC

SQLColAttributes, SQLDescribeCol и SQLNumResultCols

SQLConfigDataSource

SQLPrepare

SQLBrowseConnect

SQLConnect

SQLDriverConnect

SQLParamOptions

SQLDescribeParam


Реализация драйвера

Активные hstmt

Библиотека указателей

Арифметические ошибки

Принудительное занесение результатов транзакций

Удаленный вызов процедур


Новые характеристики

В версии 2.5 добавлены следующие новые характеристики драйвера ODBC SQL Server.

Полная совместимость с уровнем 2

Драйвер SQL Server поддерживает все функции интерфейса программирования приложений ODBC уровня 2. В версии 2.5 добавлена поддержка следующих функций:

SQLParamOptions

SQLDescribeParam

SQLSetPos

SQLExtendFetch

Подробнее см. в данной справке и в справочнике ODBC API Reference.

Указатели наборов записей на сервере

Драйвер SQL Server автоматически использует типы указателей наборов записей на сервере (статический, ключевой и динамический), реализованные в версии SQL Server 6.0. Это приводит к повышению производительности, более ясной семантике указателей наборов записей (по сравнению с библиотекой указателей в предыдущих версиях) и более эффективному использованию памяти на компьютере клиента. Указатели наборов записей на сервере не используются в следующих случаях:

·	пользователь задает для параметра ODBC_CURSORS значение SQL_CUR_USE_ODBC;

·	пользователь описывает указатель с последовательным доступом, только для чтения и с числом строк = 1;

·	пользователь описывает указатель как статический и обновляемый.

Одним из главных преимуществ использования указателей наборов записей на сервере является возможность иметь несколько активных инструкций (несколько открытых указателей наборов записей) в одном подключении. Для получения дополнительных сведений о совместном использовании в версии SQL Server 6.0 указателей наборов записей на сервере с функциями ODBC обратитесь к разделу Использование указателей наборов записей ODBC.

Типы данных Decimal и Numeric

Драйвер полностью поддерживает использование типов данных decimal и numeric и обеспечивает функции взаимного преобразования для этих и других типов данных.

Сведения о типах данных возвращаются следующим функциями ODBC:

·	SQLGetInfo

·	SQLGetTypeInfo

·	SQLColumns

·	SQLDescribeCol

·	SQLProcedureColumns

·	SQLSpecialColumns

Следующие функции ODBC могут привести к преобразованиям между типами данных ODBC SQL и ODBC C:

·	SQLBindCol

·	SQLBindParameter

·	SQLGetData

·	SQLPutData

Пакетный удаленный вызов процедур

Драйвер, по возможности, автоматически объединяет в пакет запросы к серверу на удаленный вызов процедур. Это значительно снижает число обращений к серверу и во многих случаях на порядок повышает быстродействие. Драйвер объединяет в пакет запросы на удаленный вызов процедур, если пользователь объединяет в пакет канонические вызовы сохраненных процедур, а также при вызове функции SQLParamOptions совместно с функцией SQLPrepare и SQLExecute или каноническим вызовом процедур.

Инструкции подготовки и выполнения

Для инструкции SQLPrepare драйвер создает временные сохраненные процедуры (в отличие от регулярных сохраненных процедур в предыдущих версиях). Такие процедуры автоматически удаляются при аномальном завершении подключения. В предыдущих версиях сохраненные процедуры, созданные при подготовке инструкций, оставались на сервере не привязанными при аномальном завершении подключения. Кроме того, драйвер поддерживает специфический параметр подключения (SQL_USE_PROCEDURE_FOR_PREPARE), управляющий удалением временных сохраненных процедур. Такие процедуры удаляются по умолчанию при освобождении подключения. Если пользователь отправляет через подключение несколько подготавливаемых и выполняемых процедур, и требуется ограничить использование базы данных временных инструкций (TempDB), можно настроить драйвер на удаление таких процедур при закрытии дескриптора hstmt.

Характеристики SQL Server 6.0

Драйвер позволяет использовать следующие новые характеристики версии SQL Server v6.0.

·	С помощью инструкции Set Transaction Isolation Level драйвер обеспечивает:

·	уровень изоляции «чтение без занесения» (Read Uncommitted);

·	принудительное строгое обеспечение последовательности.

В предыдущих версиях драйвер «вручную» добавлял параметр HoldLock в предложение FROM инструкции SELECT, если пользователь выдавал запрос на параметр Serializable.

·	Драйвер использует инструкцию SET FMTONLY для реализации вызовов функций API SQLDescribeCol и SQLColAttributes. Ранее для вызова этих функций требовался «пустой» запрос, не возвращающий результатов.

·	Драйвер принудительно включает режим использования идентификаторов ANSI в кавычках и выполняет инструкцию SET QUOTED_IDENTIFIER ON в начале последовательности.

·	Драйвер открывает расширение SQL Server ANSI '89 IEF с помощью функций API SQLPrimaryKeys и SQLForeignKeys.

·	Драйвер использует инструкцию Set ANSI_NULL_DFLT_ON для обеспечения ANSI-совместимого режима пустых значений для столбцов. В предыдущих версиях драйвер «вручную» добавлял ключевое слово Null в конец спецификации столбца.

·	Драйвер допускает аргументы типа text или image в сохраненных процедурах. Вызов таких сохраненных процедур трактуется как запрос на удаленный вызов процедур, в отличие от предыдущих версий, где такие вызовы рассматривались как события языка.

·	Драйвер автоматически использует стандартный размер пакетов, заданный на сервере, если другой размер не указан явно с помощью функции ODBC SQLSetConnectOption.

Атрибут Identity

Драйвер делает доступным атрибут Identity версии SQL Server 6.0 с помощью дескриптора SQL_COLUMN_AUTO_INCREMENT в функции SQLColAttributes и столбца AUTO_INCREMENT в результирующем наборе записей SQLGetTypeInfo. SQL Server рассматривает identity как атрибут, тогда как в ODBC identity трактуется как тип данных. Чтобы разрешить это противоречие, функция SQLGetTypeInfo возвращает пять новых типов данных:

·	int identity

·	smallint identity

·	tinyint identity

·	decimal identity

·	numeric identity

Обработка текста и изображений

Драйвер поддерживает дополнительные возможности обработки текста и изображений.

·	При подключении к SQL Server 6.0 драйвер использует новую функцию UPDATETEXT на сервере, поддерживающую обновление столбцов типа text или image для всех строк при выполнении инструкции UPDATE, затрагивающей несколько строк. При подключении к SQL Server 4.2x обновлялись поля текста и изображений только в первой строке (в инструкции UPDATE для нескольких строк).

·	Драйвер поддерживает специфический параметр инструкции (SQL_TEXTPTR_LOGGING), отключающий регистрацию операций со столбцами текста и изображений.

·	При использовании указателей наборов записей на сервере драйвер выполняет загрузку текста и изображений для столбцов без привязки, если это не задается пользователем в явном виде с помощью вызова SQLGetData.

·	При подключении к SQL Server 6.0 функции SQLExecDirect и SQLExecute не требуют выполнения сценария SQL_LEN_DATA_AT_EXEC, хотя выполнение сценария повышает эффективность.

Повышение быстродействия

Следующие характеристики драйвера обеспечивают повышение быстродействия.

·	Экономия на времени подключения. Драйвер выполняет в пакетном режиме информационные запросы к серверу при установлении подключения. Это позволяет снизить число обращений к серверу. Параметр быстрого подключения более не требуется и не поддерживается.

·	Драйвер обеспечивает экономное использование памяти (за счет удаления копий), что позволяет повысить скорость обработки результатов.

·	64-разрядные арифметические операции. 32-разрядный драйвер использует 64-разрядные арифметические операции при преобразовании типов данных money, decimal и numeric.

Интегрированная система безопасности

Драйвер поддерживает параметр (SQL_INTEGRATED_SECURITY), обеспечивающий защиту подключений с сервера SQL Server 6.0.

SQLExtendedFetch для SQL Server 4.2a

Драйвер поддерживает функцию API SQLExtendedFetch (для указателей наборов записей с последовательным доступом, доступных только для чтения) для сервера версии SQL Server 4.21a.

Имена источников данных

При установке 32-разрядного драйвера пользователь имеет возможность преобразования 16-разрядных имен источников данных в 32-разрядные имена источника данных, что позволяет сделать их доступными для использования в 32-разрядных приложениях. Кроме того, драйвер использует настройку преобразования OEMtoANSI, заданную в программе настройки клиента, как настройку по умолчанию при описании нового имени источника данных.

DayOfWeek

Драйвер поддерживает каноническую функцию DayOfWeek, определенную в ODBC.

Литералы в процедурах

Драйвер выполняет канонические вызовы процедур, с литералами в качестве аргументов, через службу удаленного вызова процедур. В предыдущих версиях, если не были указаны все маркеры параметров, вызов осуществлялся как событие языка.

Изменения функции SQLGetInfo

См. раздел SQLGetInfo.

INSTCAT.SQL

В версии добавлены новые характеристики каталога сохраненных процедур, обеспечивающие повышение быстродействия по сравнению с предыдущими версиями.

DBCS

Драйвер версии 2.5 поддерживает двухбайтовые наборы символов (DBCS).

Арифметические ошибки

Драйвер версии 2.5 поддерживает использование инструкции SET ARITHABORT ON для улучшения семантики ODBC.

ODBC SDK

Комплект разработчика ODBC SDK включен в программное обеспечение Microsoft SQL Workstation версии 6.0.


Введение

Microsoft SQL Server является реляционной системой управления базами данных (СУБД), выполняемой в среде Microsoft Windows NT. Имеются 16- и 32-разрядные версии драйвера ODBC SQL Server. Для доступа к данным в базах данных SQL Server используется язык SQL. Рабочие станции клиентов связываются по сети с серверами SQL, такими как Windows NT Server, Novell NetWare, Banyan VINES или серверами сети TCP/IP.

Драйвер SQL Server позволяет приложениям получать доступ к данным в базах данных Microsoft SQL Server с помощью интерфейса ODBC.

Следует отметить, что 32-разрядный драйвер SQL Server обеспечивает защиту потоков. Драйвер обеспечивает последовательный доступ к общим ресурсам с использованием множественных потоков к объектам hstmt, hdbc и henv. Однако правильный порядок выполнения операций внутри инструкций и сеансов подключений по-прежнему определяется программой ODBC даже в том случае, когда программа использует множественные потоки.

Архитектура приложение/драйвер в 16-разрядной среде имеет вид:

                  Приложение (16-бит)           Приложение (32-бит в Win32s)
|	|
32-разрядный перехватывающий диспетчер драйверов
(ODBC32.DLL)
|	|
Универсальная перехватывающая библиотека ODBC
(ODBC16UT.DLL)
|	|
Диспетчер драйверов ODBC
(ODBC.DLL)
|
Библиотека указателей ODBC (необязательная)
(ODBCCURS.DLL)
|
Драйвер SQL Server (16-бит)
(SQLSRVR.DLL)
|
Сетевая библиотека
(DBNMP3.DLL, DBMSSPX3.DLL и т.д. )
|
Сетевое программное обеспечение
(Windows NT, Windows для рабочих групп, Novell NetWare и т.д. )
|
Microsoft SQL Server

Архитектура приложение/драйвер в 32-разрядной среде имеет вид:

Приложение (16-бит)                        Приложение (32-бит)
|	|
Диспетчер драйверов ODBC	Диспетчер драйверов ODBC
(ODBC.DLL)	(ODBC32.DLL)
|	|
Библиотека указателей ODBC	Библиотека указателей ODBC (необязательные)
(ODBCCURS.DLL)	(ODBCCR32.DLL)
|	|
Универсальная перехватывающая библиотека ODBC (16-бит )
(ODBC16GT.DLL)
|	|
Универсальная перехватывающая библиотека ODBC (32-бит)
(ODBC32GT.DLL)
|	|
Драйвер SQL Server (32-бит)
(SQLSRV32.DLL)
|
Сетевая библиотека
(DBNMPNTW.DLL, DBMSSPXN.DLL и т.д. )
|
Сетевое программное обеспечение
(Windows NT, Windows для рабочих групп, Novell NetWare и т.д. )
|
Microsoft SQL Server

Термин перехватывающий означает перехват вызова функции, выполнение специальной обработки для взаимной трансляции 16-разрядных и 32-разрядных программ с последующей передачей управления вызываемой функции.

См. также

Установка драйвера SQL Server

Установка ODBC SQL Server

Подключение к источнику данных SQL Server

Системные требования


Системные требования

Для доступа к данным SQL Server необходимо иметь:

·	драйвер SQL Server;

·	продукт Microsoft SQL Server;

·	сетевое программное обеспечение для компьютеров, на которых выполняются драйвер и SQL Server (не требуется при подключении к локальному (не сетевому) настольному серверу SQL Server).

Ниже перечислены требования к оборудованию и программному обеспечению для каждого из этих компонент.

Драйвер SQL Server

Требуемое оборудование:

·	компьютер с архитектурой ISA, т.е. IBM PC/AT или совместимый;

или

компьютер с архитектурой MCA, т.е. IBM PS/2 или совместимый;

или

компьютер с архитектурой EISA с микропроцессором 80286, 80386, 80486 или Pentium;

или

микропроцессор Alpha AXP или MIPS;

·	ОЗУ не менее 2 Мбайт, желательно 4 Мбайт.

·	жесткий диск, на котором для драйвера SQL Server и диспетчера драйверов ODBC выделяется примерно 300 Кбайт.

Требования к программному обеспечению:

·	Microsoft Windows версии 3.1 или более поздней (16-разрядный драйвер);

·	Microsoft Windows 95 или Windows NT 3.5 или более поздняя (32-разрядный драйвер).

Для получения дополнительных сведений о требованиях к аппаратному и программному обеспечению для клиентов SQL Server см. документацию Microsoft SQL Server Setup.

SQL Server

Чтобы использовать драйвер SQL Server для доступа к данным в базах данных Microsoft SQL Server, необходимо иметь программное обеспечение Microsoft SQL Server версии 4.21A или более поздней. Каталог сохраненных процедур должен быть установлен на сервере SQL Server. При использовании Microsoft SQL Server версии 4.21A может возникнуть необходимость установить каталог сохраненных процедур, поставляемый с этим драйвером (см. раздел Обновление каталога сохраненных процедур). Для получения дополнительных сведений о требованиях к аппаратному и программному обеспечению SQL Server см. документацию Microsoft SQL Server Setup.

Сетевое программное обеспечение

Сетевое программное обеспечение требуется для соединения компьютеров, на которых выполняются драйвер SQL Server и SQL Server. Для подключения к серверу SQL Server можно использовать Microsoft Windows NT, Microsoft Windows для рабочих групп или совместимое сетевое программное обеспечение, например, IBM LAN Server или DEC Pathworks, Novell NetWare и Banyan VINES. Для получения дополнительных сведений о требованиях к аппаратному и программному обеспечению для каждой сети следует обращаться к документации сети.

Драйвер SQL Server поддерживает связь с сетевым программным обеспечением через интерфейс SQL Server Net-Library, для которого требуется библиотека динамической компоновки Net-Library. Для получения дополнительных сведений о поддерживаемых сетевых конфигурациях и файлах Net-Library см. документацию Microsoft SQL Server Setup.

См. также

Установка драйвера SQL Server


Установка драйвера SQL Server

Драйвер ODBC SQL Server устанавливается автоматически при установке программного обеспечения клиента SQL Server 6.0 на компьютере с операционной системой Windows NT, Windows 95 или Windows 3.11. Для получения дополнительных сведений об установке программного обеспечения клиента SQL Server 6.0 см. документацию Microsoft SQL Server Setup.

Если требуется только переустановить драйвер ODBC SQL Server, можно запустить программу ODBC setup из подкаталога ODBC в установочном каталоге соответствующего клиента.

Для использования драйвера SQL Server обычно требуется добавить источник данных для каждой установки сервера SQL Server, для которого может потребоваться доступ к данным. См. раздел Источники данных SQL Server.

В программном обеспечение Microsoft SQL Server версии 4.21A файл INSTCAT.SQL, включенный в комплект драйвера, содержит некоторые исправления для каталога сохраненных процедур. Чтобы установить каталог сохраненных процедур, следуйте инструкциям, приведенным в разделе Обновление каталога сохраненных процедур.

См. также

Источники данных SQL Server

Системные требования


Сообщения об ошибках

При возникновении ошибки драйвер SQL Server возвращает собственный код ошибки, SQLSTATE (код ошибки ODBC) и сообщение об ошибке. Источниками этих данных служат ошибки, обнаруженные драйвером, и ошибки, возвращаемые сервером SQL Server.

Собственные коды ошибок

Для ошибок, возникающих в источнике данных (возвращаемых SQL Server), драйвер SQL Server возвращает собственные коды ошибок, полученные от сервера SQL Server. Для ошибок, обнаруженных драйвером, возвращается нулевое значение собственного кода ошибки. Список собственных кодов ошибок можно найти в столбце ошибок системной таблицы sysmessages в базе данных master SQL Server.

SQLSTATE (коды ошибок ODBC)

Для ошибок, возникающих в источнике данных, которые обнаруживаются и возвращаются сервером SQL Server, драйвер SQL Server выполняет сопоставление возвращенного собственного кода ошибки с соответствующим значением SQLSTATE. Если не удается сопоставить собственный код ошибки с кодом ошибки ODBC, драйвер SQL Server возвращает код SQLSTATE 37000 (ошибка синтаксиса или нарушение прав доступа). Для ошибок, обнаруженных драйвером, драйвер SQL Server генерирует соответствующий код SQLSTATE.

Сообщения об ошибках

Для ошибок, возникающих в источнике данных, которые обнаруживаются и возвращаются сервером SQL Server, драйвер SQL Server возвращает сообщение об ошибке, основанное на сообщении, возвращенном сервером SQL Server. Для ошибок, возникающих в драйвере SQL Server или в диспетчере драйверов, драйвер SQL Server драйвер  возвращает сообщение об ошибке, основанное на тексте, сопоставленном коду SQLSTATE. Список сообщения об ошибках, возвращаемых сервером SQL Server (но не драйвером SQL Server), можно найти в столбце описаний системной таблицы sysmessages в базе данных master SQL Server.

Синтаксис

Сообщения об ошибках имеют следующий формат:

[поставщик][компонент_ODBC][источник_данных]сообщение_об_ошибке

Префиксы, стоящие в квадратных скобках ([ ]), идентифицируют источник ошибки, как это показано в следующей таблице.

Примечание.  Если ошибка возникает в источник данных, префиксы [поставщик] и [компонент_ODBC] идентифицируют поставщика и имя компонента ODBC, принявшего ошибку от источник данных.

Источник	Префикс	Значение
Диспетчер драйверов	[поставщик] [компонент_ODBC] [источник_данных]	[Microsoft] [ODBC Driver Manager] Отсутствует
Библиотека указателей	[поставщик] [компонент_ODBC] [источник_данных]	[Microsoft] [ODBC Cursor Library] Отсутствует
Драйвер SQL Server	[поставщик] [компонент_ODBC] [источник_данных]	[Microsoft] [ODBC SQL Server Driver] Отсутствует
SQL Server	[поставщик] [компонент_ODBC] [источник_данных]	[Microsoft] [ODBC SQL Server Driver] [SQL Server]


Обновление каталога сохраненных процедур

Для получения данных из системного каталога SQL Server драйвер SQL Server использует набор системных сохраненных процедур, называемый также каталогом сохраненных процедур. Каталог сохраненных процедур устанавливается автоматически при установке и обновлении программного обеспечения Microsoft SQL Server. Файл INSTCAT.SQL, включенный в комплект этого драйвера, содержит некоторые исправления каталога сохраненных процедур. Обновление каталога сохраненных процедур системным администратором SQL Server на сервере с программным обеспечением Microsoft SQL Server версии 4.21A рекомендуется, но не является обязательным.

Для обновления каталога сохраненных процедур системный администратор должен запустить сценарий с помощью служебной программы isql (см. приведенные ниже инструкции). Перед внесением любых изменений в базу данных master системный администратор должен создать ее архивную копию. Для запуска программы isql на компьютере должно быть установлено программное обеспечение рабочей станции клиента Microsoft SQL Server.

Чтобы обновить каталог сохраненных процедур:

·	с командной строки с помощью программы isql запустите сценарий INSTCAT.SQL. Например, C:> ISQL /Usa /Pпароль_са /Sимя_сервера /iпуть\INSTCAT.SQL

где

путь представляет полный путь к файлу INSTCAT.SQL. Можно использовать файл INSTCAT.SQL из установленного программного обеспечения SQL Server 6.0 (путь по умолчанию C:\SQL60\INSTALL) или с компакт-диска SQL Server 6.0 (путь по умолчанию D:\платформа где D представляет имя дисковода компакт-дисков, а платформа каталог, соответствующий платформе сервера, например, I386).

пароль_са представляет пароль системного администратора.

имя_сервера представляет имя сервера, на котором находится программное обеспечение SQL Server.

Сценарий INSTCAT.SQL генерирует сообщения, которые следует игнорировать.

Выполнить сценарий INSTCAT.SQL не удается, если в базе данных master недостаточно места для сохранения каталога сохраненных процедур или для регистрации изменений в существующем каталоге сохраненных процедур. При сбое сценария INSTCAT.SQL необходимо обратиться к системному администратору.

Драйвер SQL Server использует следующие сохраненные процедуры.

Процедура	Возвращаемые данные
sp_column_privileges	Сведения о привилегиях для столбцов указанных таблиц.
sp_columns	Сведения о столбцах указанных таблиц.
sp_databases	Список баз данных.
sp_datatype_info	Сведения о поддерживаемых типах данных.
sp_fkeys	Сведения о логических внешних ключах.
sp_pkeys	Сведения об основных ключах.
sp_server_info	Список имен атрибутов и соответствующих значений для сервера.
sp_special_columns	Сведения для конкретной таблицы о столбцах, имеющих специальные атрибуты.
sp_sproc_columns	Сведения о столбцах для сохраненной процедуры.
sp_statistics	Список индексов для конкретной таблицы.
sp_stored_procedures	Список сохраненных процедур.
sp_table_privileges	Сведения о привилегиях указанных таблиц.
sp_tables	Список объектов, к которым можно применять запросы.
Для получения дополнительных сведений о каталоге сохраненных процедур см. документацию Microsoft SQL Server Transact-SQL Reference.


Установка ODBC SQL Server

Чтобы получить доступ к диалоговому окну Установка ODBC сервера SQL:

1.	Дважды щелкните значок «ODBC» панели управления.

Примечание.   При использовании 16-разрядных драйверов в Microsoft Windows NT в окне диспетчера программ откройте группу «Microsoft ODBC» и дважды щелкните значок «Microsoft ODBC Administrator».

2.	Открывается диалоговое окно Источники данных. Нажмите кнопку «Добавить».

Открывается диалоговое окно Добавление источника данных.

3.	В списке «Установленные драйверы ODBC» выберите элемент «SQL Server» и нажмите кнопку «OK».

Открывается диалоговое окно Установка ODBC сервера SQL.

Диалоговое окно Установка ODBC сервера SQL содержит следующие элементы.

Поле «Имя источника данных (DSN)»

Имя источника данных. Например, «Personnel Data».

Поле «Название»

Описание источника данных. Например, «Дата найма, сведения о зарплате и заметки о сотрудниках».

Поле со списком «Сервер»

Имя сервера SQL Server в сети. Пользователь имеет возможность выбрать имя сервера в раскрывающемся списке или ввести имя с клавиатуры.

Для компьютера с операционной системой Microsoft Windows NT вместо имени сервера можно выбрать элемент «(local)». Это позволит пользователю использовать локальную копию SQL Server (прослушивающую именованные каналы) даже в том случае, если выполняется не сетевая версия SQL Server. Следует отметить, что при выборе элемента «(local)» для использования 16-разрядного драйвера SQL Server без сети необходимо установить MS Loopback Adapter.

Для получения дополнительных сведений об именах серверов для сетей различных типов следует обратиться к документации Microsoft SQL Server Setup.

Поле «Сетевой адрес»

Адрес СУБД SQL Server, из которой драйвер загружает данные. Для Microsoft SQL Server обычно используют стандартное значение «(Default)».

Поле «Сетевая библиотека»

Имя сетевой библиотеки SQL Server, которая используется драйвером SQL Server для связи с сетевым программным обеспечением. Если оставить для этого параметра значение «(Default)», драйвер SQL Server использует стандартную библиотеку Net-Library компьютера клиента, которая задается в поле «Default Network» на вкладке «Net-Library» в окне программы SQL Server Client Configuration.

Если источник данных создается путем указания в поле «Сетевая библиотека» значения, отличного от «(Default)», и необязательного значения в поле «Сетевой адрес», программа настройки сервера SQL ODBC создает запись с именем сервера, которое будет выводиться на вкладке «Advanced» в окне программы SQL Server Client Configuration. Такие имена серверов используются также библиотечными приложениями.

Кнопка «Параметры»

Кнопка «Параметры» выводит на экран следующие поля.

Поле «Имя базы данных»

Имя базы данных на сервере SQL Server.

Поле со списком «Язык»

Язык, используемый SQL Server.

Флажок «Генерация хранимой процедуры для подготовленной инструкции»

При установке данного флажка (по умолчанию) для готовых инструкций создаются сохраненные процедуры. Драйвер SQL Server подготавливает инструкцию, помещая ее в процедуру и компилируя эту процедуру.

Если этот флажок снят, режим создания сохраненных процедур для подготовленных инструкций отключается. В этом случае подготовленная инструкция сохраняется и выполняется во время выполнения.

Группа «Трансляция»

Описание текущего транслятора. Чтобы выбрать другой транслятор, нажмите кнопку «Выбор» и выберите транслятор в списке в диалоговом окне Выбор транслятора.

Флажок «Преобразование из OEM в ANSI»

Установите этот флажок, если на компьютере клиенте SQL Server и на сервере SQL Server используется один и тот же набор символов, не являющийся набором ANSI. Например, если SQL Server использует кодовую страницу 850 и компьютер клиента использует кодовую страницу 850 как кодовую страницы OEM, включение данного параметра обеспечит корректное преобразование в символы ANSI символов из расширенного набора, сохраненных в базе данных, для использования в приложениях Windows.

Если этот флажок снят, а на сервере SQL Server и компьютере клиенте SQL Server используются разные наборы символов, пользователь должен указать транслятор наборов символов.

См. также

Параметры подключения, определяемые драйвером

Смена источников данных с помощью функции SQLConfigDataSource


Смена источников данных с помощью функции SQLConfigDataSource

Функция API SQLConfigDataSource позволяет динамически добавлять, изменять или удалять источник данных. Эта функция использует ключевые слова для указания параметров подключения, которые обычно задаются в диалоговом окне Установка ODBC сервера SQL. Эту функцию используют в тех случаях, когда необходимо  добавить, сменить или удалить источник данных без открытия диалогового окна Установка ODBC сервера SQL.


Удаление источника данных

Чтобы удалить источник данных, в диалоговом окне Источники данных выберите имя удаляемого источника в списке пользовательских источников и нажмите кнопку «Удалить», а затем нажмите кнопку «Да» в ответ на приглашение подтвердить удаление.

Может также появиться приглашение удалить имя источника данных и другие сведения из файла WIN.INI или системного реестра. Эти данные могут использоваться при подключении к источникам данных другими приложениями, вызывающими SQL Server.

Нажмите кнопку «Да», если вы уверены, что сведения об источнике данных не потребуются в других приложениях. В противном случае нажмите кнопку «Нет».


SQLGetInfo Return Values
Возвращаемые значения функции SQLGetInfo

В следующей таблице перечислены определения #defines языка C для аргумента fInfoType и соответствующие значения, возвращаемые функцией SQLGetInfo при подключении к SQL Server 6.0. Для загрузки этих данных в приложение перечисленные определения языка C #defines передаются в функцию SQLGetInfo в аргументе fInfoType.

Аргумент fInfoType (#define)	SQLGetInfo возвращает
SQL_ACCESSIBLE_PROCEDURES	Y
SQL_ACCESSIBLE_TABLES	Y
SQL_ACTIVE_CONNECTIONS	0 (Количество активных подключений определяется доступным количеством сетевых подключений на компьютере клиенте и количеством подключений, допускаемых сервером СУБД).
SQL_ACTIVE_STATEMENTS	1 (Даже если этот параметр имеет значение 1, драйвер поддерживает при подключении множественные активные инструкции, если на сервере используются указатели наборов записей. См. раздел Использование указателей наборов записей ODBC).
SQL_ALTER_TABLE	SQL_AT_ADD_COLUMN
SQL_BOOKMARK_PERSISTENCE	0
SQL_COLUMN_ALIAS	Y
SQL_CONCAT_NULL_BEHAVIOR	SQL_CB_NON_NULL
SQL_CONVERT_FUNCTIONS	SQL_FN_CVT_CONVERT
SQL_CONVERT_тип где тип представляет тип данных SQL, например, CHAR	См. раздел Сопоставление типов данных.
SQL_CORRELATION_NAME	SQL_CN_ANY
SQL_CURSOR_COMMIT_BEHAVIOR	SQL_CB_CLOSE (Характеристика ANSI. Поскольку во многих приложениях требуется сохранять текущее положение указателя при занесении/свертывании транзакций, драйвер обеспечивает параметр, SQL_PRESERVE_CURSORS, позволяющий переопределить настройку по умолчанию ANSI).
SQL_CURSOR_ROLLBACK_ BEHAVIOR	SQL_CB_CLOSE (Характеристика ANSI. Поскольку во многих приложениях требуется сохранять текущее положение указателя при занесении/свертывании транзакций, драйвер обеспечивает параметр, SQL_PRESERVE_CURSORS, позволяющий переопределить настройку по умолчанию ANSI).
SQL_DBMS_NAME	Microsoft SQL Server
SQL_DEFAULT_TXN_ISOLATION	SQL_TXN_READ_COMMITTED.
SQL_ДРАЙВЕР_NAME	SQLSRVR.DLL (16-бит) SQLSRV32.DLL (32-бит)
SQL_ДРАЙВЕР_ODBC_VER	02.50
SQL_ДРАЙВЕР_VER	02.50.nnnn (где nnnn указывает номер выпуска).
SQL_EXPRESSIONS_IN_ORDERBY	Y
SQL_FETCH_DIRECTION	SQL_FD_FETCH_NEXT SQL_FD_FETCH_FIRST SQL_FD_FETCH_LAST SQL_FD_FETCH_PRIOR SQL_FD_FETCH_ABSOLUTE SQL_FD_FETCH_RELATIVE
SQL_FILE_USAGE	SQL_FILE_NOT_SUPPORTED
SQL_GETDATA_EXTENSIONS	SQL_GD_BLOCK
SQL_GROUP_BY	SQL_GB_GROUP_BY_CONTAINS_SELECT
SQL_IDENTIFIER_CASE	(Зависит от настройки SQL Server на работу с учетом или без учета регистра символов).
SQL_IDENTIFIER_QUOTE_CHAR	" (символ прямых кавычек).
SQL_KEYWORDS	BREAK BROWSE BULK CHECKPOINT CLUSTERED COMMITTED COMPUTE CONFIRM CONTROLROW DATABASE DBCC DISK DUMMY DUMP ERRLVL ERROREXIT EXIT EXPIREDATE FILE FILLFACTOR FLOPPY GETDEFAULT HOLDLOCK IDENTITY_INSERT IDENTITYCOL IF KILL LINENO LOAD MIRROREXIT NONCLUSTERED OFF OFFSETS ONCE OVER PERM PERMANENT PLAN PRINT PROC PROCESSEXIT PUBLIC RAISERROR READ READTEXT RECONFIGURE REPEATABLE RETAINDATE RETURN ROWCOUNT RULE SAVE SERIALIZABLE SETUSER SHUTDOWN STATISTICS TAPE TEMP TEXTSIZE TRAN TRIGGER TRUNCATE TSEQUEL UNCOMMITTED UPDATETEXT USE VOLUME WAITFOR WHILE WRITETEXT
SQL_LIKE_ESCAPE_CLAUSE	N
SQL_LOCK_TYPES	SQL_LCK_NO_CHANGE
SQL_MAX_BINARY_LITERAL_LEN	131072
SQL_MAX_CHAR_LITERAL_LEN	131072
SQL_MAX_COLUMN_NAME_LEN	30
SQL_MAX_COLUMNS_IN_GROUP_ BY	16
SQL_MAX_COLUMNS_IN_INDEX	16
SQL_MAX_COLUMNS_IN_ORDER_ BY	16
SQL_MAX_COLUMNS_IN_SELECT	4000
SQL_MAX_COLUMNS_IN_TABLE	250
SQL_MAX_CURSOR_NAME_LEN	30
SQL_MAX_INDEX_SIZE	256
SQL_MAX_OWNER_NAME_LEN	30
SQL_MAX_PROCEDURE_NAME_LEN	36 (от 1 до 30 символов, за котрыми следуют символ точки с запятой [;] и от одной до пяти цифр).
SQL_MAX_QUALIFIER_NAME_LEN	30
SQL_MAX_ROW_SIZE	1962
SQL_MAX_ROW_SIZE_INCLUDES_    LONG	N
SQL_MAX_STATEMENT_LEN	131072
SQL_MAX_TABLE_NAME_LEN	30
SQL_MAX_TABLES_IN_SELECT	16
SQL_MAX_USER_NAME_LEN	30
SQL_MULT_RESULT_SETS	Y
SQL_MULTIPLE_ACTIVE_TXN	Y
SQL_NEED_LONG_DATA_LEN	Y
SQL_NON_NULLABLE_COLUMNS	SQL_NNC_NON_NULL
SQL_NULL_COLLATION	SQL_NC_LOW
SQL_NUMERIC_FUNCTIONS	SQL_FN_NUM_ABS SQL_FN_NUM_ACOS SQL_FN_NUM_ASIN SQL_FN_NUM_ATAN SQL_FN_NUM_ATAN2 SQL_FN_NUM_CEILING SQL_FN_NUM_COS SQL_FN_NUM_COT SQL_FN_NUM_DEGREES SQL_FN_NUM_EXP SQL_FN_NUM_FLOOR SQL_FN_NUM_LOG SQL_FN_NUM_LOG10 SQL_FN_NUM_MOD SQL_FN_NUM_PI SQL_FN_NUM_POWER SQL_FN_NUM_RADIANS SQL_FN_NUM_RAND SQL_FN_NUM_ROUND SQL_FN_NUM_SIGN SQL_FN_NUM_SIN SQL_FN_NUM_SQRT SQL_FN_NUM_TAN
SQL_ODBC_API_CONFORMANCE	SQL_OAC_LEVEL2
SQL_ODBC_SAG_CLI_ CONFORMANCE	SQL_OSCC_NOT_COMPLIANT
SQL_ODBC_SQL_CONFORMANCE	SQL_OSC_CORE
SQL_ODBC_SQL_OPT_IEF	Y
SQL_ORDER_BY_COLUMNS_IN_ SELECT_SQL_OJ_CAPABILITIES	N SQL_OJ_LEFT SQL_OJ_RIGHT SQL_OJ_NESTED
SQL_OUTER_JOINS	Y
SQL_OWNER_TERM	владелец
SQL_OWNER_USAGE	SQL_OU_DML_STATEMENTS SQL_OU_PROCEDURE_     INVOCATION SQL_OU_TABLE_DEFINITION SQL_OU_INDEX_DEFINITION SQL_OU_PRIVILEGE_     DEFINITION
SQL_POS_OPERATIONS	SQL_POS_ADD SQL_POS_DELETE SQL_POS_POSITION SQL_POS_REFRESH SQL_POS_UPDATE
SQL_POSITIONED_STATEMENTS	SQL_PS_POSITIONED_DELETE SQL_PS_POSITIONED_UPDATE SQL_PS_SELECT_FOR_     UPDATE
SQL_PROCEDURE_TERM	сохраненная процедура
SQL_PROCEDURES	Y
SQL_QUALIFIER_LOCATION	SQL_QL_START
SQL_QUALIFIER_NAME_ SEPARATOR	. (точка)
SQL_QUALIFIER_TERM	база данных
SQL_QUALIFIER_USAGE	SQL_QU_DML_STATEMENTS, SQL_QU_PROCEDURE_    INVOCATION, SQL_QU_TABLE_DEFINITION
SQL_QUOTED_IDENTIFIER_CASE	(Зависит от настройки SQL Server на работу с учетом или без учета регистра символов).
SQL_ROW_UPDATES	N
SQL_SCROLL_CONCURRENCY	SQL_SCCO_LOCK SQL_SCCO_OPT_ROWVER SQL_SCCO_OPT_VALUES SQL_SCCO_READ_ONLY
SQL_SCROLL_OPTIONS	SQL_SO_DYNAMIC SQL_SO_FORWARD_ONLY SQL_SO_KEYSET_DRIVEN SQL_SO_STATIC
SQL_SEARCH_PATTERN_ESCAPE	"\" (обратная косая)
SQL_SPECIAL_CHARACTERS	#$АБВГДЕЖЗИЙКЛМНОПРСТУФХЦШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцшщъыьэюя
SQL_STATIC_SENSITIVITY	SQL_SS_ADDITIONS SQL_SS_UPDATES
SQL_STRING_FUNCTIONS	SQL_FN_STR_ASCII, SQL_FN_STR_CHAR, SQL_FN_STR_CONCAT, SQL_FN_STR_DIFFERENCE, SQL_FN_STR_INSERT, SQL_FN_STR_LCASE, SQL_FN_STR_LEFT, SQL_FN_STR_LENGTH, SQL_FN_STR_LOCATE_2, SQL_FN_STR_LTRIM, SQL_FN_STR_REPEAT, SQL_FN_STR_RIGHT, SQL_FN_STR_RTRIM, SQL_FN_STR_SOUNDEX, SQL_FN_STR_SPACE, SQL_FN_STR_SUBSTRING, SQL_FN_STR_UCASE
SQL_SUBQUERIES	SQL_SQ_COMPARISON, SQL_SQ_EXISTS, SQL_SQ_IN, SQL_SQ_QUANTIFIED, SQL_SQ_CORRELATED_    SUBQUERIES
SQL_SYSTEM_FUNCTIONS	SQL_FN_SYS_DBNAME, SQL_FN_SYS_IFNULL, SQL_FN_SYS_USERNAME,
SQL_TABLE_TERM	таблица
SQL_TIMEDATE_ADD_INTERVALS	SQL_FN_TSI_FRAC_SECOND, SQL_FN_TSI_SECOND, SQL_FN_TSI_MINUTE, SQL_FN_TSI_HOUR, SQL_FN_TSI_DAY, SQL_FN_TSI_WEEK, SQL_FN_TSI_MONTH, SQL_FN_TSI_QUARTER, SQL_FN_TSI_YEAR
SQL_TIMEDATE_DIFF_INTERVALS	SQL_FN_TSI_FRAC_SECOND, SQL_FN_TSI_SECOND, SQL_FN_TSI_MINUTE, SQL_FN_TSI_HOUR, SQL_FN_TSI_DAY, SQL_FN_TSI_WEEK, SQL_FN_TSI_MONTH, SQL_FN_TSI_QUARTER, SQL_FN_TSI_YEAR,
SQL_TIMEDATE_FUNCTIONS	SQL_FN_TD_NOW, SQL_FN_TD_CURDATE, SQL_FN_TD_DAYOFMONTH, SQL_FN_TD_DAYOFWEEK, SQL_FN_TD_DAYOFYEAR, SQL_FN_TD_DAYNAME, SQL_FN_TD_MONTH, SQL_FN_TD_MONTHNAME, SQL_FN_TD_QUARTER, SQL_FN_TD_WEEK, SQL_FN_TD_YEAR, SQL_FN_TD_CURTIME, SQL_FN_TD_HOUR, SQL_FN_TD_MINUTE, SQL_FN_TD_SECOND, SQL_FN_TD_TIMESTAMPADD, SQL_FN_TD_TIMESTAMPDIFF
SQL_TXN_CAPABLE	SQL_TC_DML
SQL_TXN_ISOLATION_OPTION	SQL_TXN_READ_COMMITTED SQL_TXN_READ_     UNCOMMITTED SQL_TXN_REPEATABLE_READ SQL_TXN_SERIALIZABLE
SQL_UNION	SQL_U_UNION, SQL_U_UNION_ALL


Подключение к источнику данных SQL Server

При подключении приложения к серверу SQL Server с помощью строки подключения SQLDriverConnect в приложении может быть выведено приглашение ввести необходимые сведения. Такое приглашение может иметь вид запроса на указание источника данных или диалогового окна. В запросе на указание источника данных следует указать имя источника данных. В диалоговом окне выполните следующие действия:

1.	Введите или выберите имя сервера.

2.	Введите собственный идентификатор на SQL Server в поле «Login ID».

3.	Введите ваш пароль для входа на SQL Server в поле «Password».

4.	Нажмите кнопку «OK».

Для получения дополнительных сведений о режимах защиты при входе на SQL Server и при подключениях обращайтесь к документации Microsoft SQL Server Administrator's Companion.

Чтобы указать дополнительные параметры подключения, например, имя базы данных, к которой осуществляется доступ, и язык, используемый SQL Server, нажмите кнопку «Options».

1.	В раскрывающемся списке «Database» выберите имя базы данных.*

При раскрытии списка выбранной оказывается база данных, используемая по умолчанию.

2.	В раскрывающемся списке «Language» выберите язык, используемый SQL Server.*

При раскрытии списка выбранным оказывается язык, используемый пользователем по умолчанию.

3.	Если отображается неверное имя приложения, введите правильное имя.

Имя приложения является именем приложения, которое вызвало драйвер SQL Server.

4.	Если отображается неверное имя рабочей станции, введите правильное имя.

Обычно, этим именем является сетевое имя компьютера, на котором находится приложение.

5.	Нажмите кнопку «OK».

* Указание используемых при входе на сервер SQL Server по умолчанию базы данных и языка оказывается более эффективным, чем их указание в качестве параметров для имени источника данных.

Проверка подключения с помощью программы ODBCPING.EXE

Программа ODBCPING.EXE позволяет проверить правильность установки программного обеспечения ODBC, выполняя подключение к серверу с помощью драйвера ODBC SQL Server. Эта программа является 32-разрядным приложением, сохраненным в подкаталоге \SQL60\BINN. Для проверки возможности подключений ODBC введите с командной строки:

odbcping /Sимя_сервера /Uидентификатор /Pпароль

где

имя_сервера

Имя сервера, к которому подключается компьютер.

идентификатор

Правильное имя, используемое для входа на сервер.

пароль

Пароль для входа на сервер.

После установления подключения ODBC выводится следующее сообщение:

CONNECTED TO SQL SERVER

Если подключение ODBC установить не удалось, выводится следующее сообщение:

COULD NOT CONNECT TO SQL SERVER

См. также

Настройка ODBC SQL Server

SQLBrowseConnect

SQLConnect

SQLDriverConnect


источник данных (SQL Server)

Источник данных содержит данные и сведения, используемые при доступе к данным. Для драйвера SQL Server источником данных является база данных Microsoft SQL Server, сервер, на котором она находится и сеть, по которой осуществляется доступ к серверу.


Параметры подключения, определяемые драйвером

Драйвер SQL Server поддерживает следующие параметры подключения, определяемые драйвером, доступные в функциях SQLSetConnectOption и SQLGetConnectOption.

Параметр	Описание
SQL_INTEGRATED_SECURITY	SQL_IS_OFF. Запрос на обычное подключение к SQL Server. Система безопасности SQL Server не требует установки доверительных отношений. (По умолчанию). SQL_IS_ON. Запрос на доверенное подключение к SQL Server вне зависимости от включенного режима безопасности. Для получения дополнительных сведений о режиме безопасности сервера и доверенных подключениях см. документацию Microsoft SQL Server Administrator's Companion.
SQL_USE_PROCEDURE _FOR_PREPARE	SQL_UP_ON. Генерирование сохраненных процедур для функции SQLPrepare. (По умолчанию). SQL_UP_OFF. Отключение генерирования сохраненных процедур для функции SQLPrepare. Инструкция сохраняется, компилируется и выполняется во время выполнения. Любые проверки синтаксиса откладываются до времени выполнения. SQL_UP_ON_DROP. Временные сохраненные процедуры в явном виде сбрасываются при последующем вызове SQLPrepare или при освобождении дескриптора hstmt.
SQL_PRESERVE_CURSORS	SQL_PC_OFF. Все указатели наборов записей закрываются при вызове SQLTransact. (По умолчанию). SQL_PC_ON. Указатели наборов записей на сервере остаются открытыми при вызове SQLTransact.
Параметры #define, определяемые драйвером

Следующие параметры #define определяются драйвером SQL Server.

// //	Параметры SQLSetConnectOption/SQLSetStmtOption 1200-1249 зарезервированы.
//	Параметры подключения
#define	SQL_USE_PROCEDURE_FOR_PREPARE	1202
#define	SQL_INTEGRATED_SECURITY *	1203
#define	SQL_PRESERVE_CURSORS	1204
//	Параметры инструкций
#define	SQL_TEXTPTR_LOGGING	1225
//	Параметры SQL_USE_PROCEDURE_FOR_PREPARE
#define	SQL_UP_OFF	0L
#define	SQL_UP_ON	1L
#define	SQL_UP_ON_DROP	2L
#define	SQL_UP_DEFAULT	SQL_UP_ON
//	Параметры SQL_INTEGRATED_SECURITY
#define	SQL_IS_OFF	0L
#define	SQL_IS_ON	1L
#define	SQL_IS_DEFAULT	SQL_IS_OFF
//	Параметры SQL_PRESERVE_CURSORS
#define	SQL_PC_OFF	0L
#define	SQL_PC_ON	1L
#define	SQL_PC_DEFAULT	SQL_PC_OFF
//	Параметры SQL_TEXTPTR_LOGGING
#define	SQL_TL_OFF	0L
#define	SQL_TL_ON	1L
#define	SQL_TL_DEFAULT	SQL_TL_ON
*	Используется только до установления подключения.


Сопоставление типов данных

SQL Server выполняет сопоставление собственных типов данных с типами данных ODBC SQL. В следующей таблице перечислены типы данных SQL Server и показано, с какими типами данных ODBC SQL они сопоставляются.

Типы данных SQL Server	Типы данных ODBC SQL
binary	SQL_BINARY
bit	SQL_BIT
char, character	SQL_CHAR
datetime	SQL_TIMESTAMP
decimal, dec (SQL Server 6.0)	SQL_DECIMAL
float, double precision, float(n) для n = 8-15	SQL_FLOAT
image	SQL_LONGVARBINARY
int, integer	SQL_INTEGER
money	SQL_DECIMAL
numeric (SQL Server 6.0)	SQL_NUMERIC
real, float(n) для n = 1-7	SQL_REAL
smalldatetime	SQL_TIMESTAMP
smallint	SQL_SMALLINT
smallmoney	SQL_DECIMAL
sysname	SQL_VARCHAR
text	SQL_LONGVARCHAR
timestamp*	SQL_BINARY (SQL Server 6.0) SQL_VARBINARY (SQL Server 4.2x)
tinyint	SQL_TINYINT
varbinary, binary varying	SQL_VARBINARY
varchar, character varying, char varying	SQL_VARCHAR
*	Тип данных timestamp преобразуется в тип данных SQL_VARBINARY или SQL_BINARY, поскольку значения в столбцах timestamp не являются значениями даты/времени. Эти значения являются значениями типа varbinary(8) или binary(8), фиксирующими текущую работу SQL Server.

Примечание.   Драйвер SQL Server не выполняет преобразование SQL данных, принадлежащих к типам SQL_CHAR, SQL_VARCHAR или SQL_LONGVARCHAR, в типы данных языка C SQL_C_DATE или SQL_C_TIME. Все другие преобразования поддерживаются для типов данных ODBC SQL, перечисленных в настоящем разделе. Для получения дополнительных сведений о поддерживаемых преобразованиях см. Appendix D в документации Microsoft ODBC SDK Programmer's Reference.


Использование типов данных

Драйвер SQL Server и программное обеспечение SQL Server накладывают следующие ограничения на используемые типы данных.

Тип данных	Ограничения
Литералы даты	Литералы даты, сохраненные в столбце типа SQL_TIMESTAMP (типы datetime или smalldatetime SQL Server), получают значение времени 12:00:00.000 A.M. (полночь).
money и smallmoney	Существенными являются только целые части значений типов money и smallmoney. Если дробные части денежных значений SQL обрезаются при преобразовании типов данных, драйвер SQL Server возвращает предупреждение, а не ошибку.
SQL_BINARY	Если в столбце типа SQL_BINARY допускаются пустые (null) значения, свободные места в источнике данных не заполняются нулями. При загрузке данных из такого столбца драйвер SQL Server заполняет его нулями справа. Однако для данных, создаваемых в операциях, выполняемых SQL Server, например, при слиянии строк, такое заполнение не применяется.
SQL_CHAR (обрезание)	При помещении данных в столбец типа SQL_CHAR SQL Server обрезает данные справа без предупреждения, если значение оказывается слишком длинным и не умещается в столбце.
SQL_CHAR (допускаются значения null)	Если в столбце типа SQL_CHAR допускаются пустые (null) значения, свободные места в источнике данных не заполняются символами пустой строки. При загрузке данных из такого столбца драйвер SQL Server заполняет его символами пустой строки справа. Однако для данных, создаваемых в операциях, выполняемых SQL Server, например, при слиянии строк, такое заполнение не применяется.
SQL_LONGVAR BINARY, SQL_LONGVAR CHAR	Обновление столбцов типов SQL_LONGVARBINARY или SQL_LONGVARCHAR (с помощью предложения WHERE), затрагивающее несколько столбцов, полностью поддерживается при подключении к SQL Server 6.0. При подключении к SQL Server версии 4.2x возвращается ошибка S1000 «Неполная вставка/обновление. Вставка/обновление столбцов текста или рисунков не выполнена», если в операции участвуют несколько столбцов.
Аргументы строковых функций	Аргументы string_exp, задающие строковое выражение в строковых функциях, должны иметь тип данных SQL_CHAR или SQL_VARCHAR. Строковые функции не поддерживают тип SQL_LONG_VARCHAR. Значения аргумента count не должны превышать 255поскольку типы данных SQL_CHAR и SQL_VARCHAR ограничивают максимальную длину строкового значения 255 символами.
Литералы времени	Литералы времени, сохраненные в столбце типа SQL_TIMESTAMP (типы datetime или smalldatetime SQL Server), получают значение даты 1 января 1900 г.
timestamp	В столбец типа timestamp вручную можно вставить только значение Null. Поскольку SQL Server автоматически обновляет столбцы типа timestamp, значения Null переписываются.
tinyint	Тип tinyint SQL Server сохраняет значения без знака. Столбец типа tinyint связывается с переменной типа SQL_C_UTINYINT по умолчанию.
Определяемые пользователем типы данных	При подключении к SQL Server версии 4.2x драйвер SQL Server добавляет NULL в описание столбца, в котором явно не описана возможность сохранения пустых значений. Таким образом, возможность сохранения пустых значений, сохраненная в описании типа данных, определяемого пользователем игнорируется. При подключении к SQL Server версии 4.2x столбцы с определяемым пользователем типами данных, для которых базовыми типами являются типы char / binary и для которых не описана возможность сохранения пустых значений, создаются как типы varchar / varbinary. Функции SQLColAttributes, SQLColumns и SQLDescribeCol возвращают для этих столбцов типы SQL_VARCHAR / SQL_VARBINARY. Заполнение для этих столбцов не выполняется.
Типы данных LONG	Данные типа SQL_LONGVARBINARY должны передаваться в функцию SQLPutData как исходные двоичные данные, а не как двоичные данные, преобразованные в символы. Кроме того, для типов данных SQL_LONGVARBINARY и SQL_LONGVARCHAR ограничиваются аргументы данных, обновляемых при выполнении. Более подробное описание см. в разделе Ограничения на аргументы данных, обновляемых при выполнении.


Разрешение вопросов со значениями Null

В грамматике ODBC столбцы, для которых возможность сохранения значений Null не указана в явном виде, считаются допускающими пустые значения. В грамматике SQL Server столбцы, для которых возможность сохранения значений Null не указана в явном виде, считаются не допускающими пустые значения.

При подключении к SQL Server 6.0 драйвер SQL Server разрешает это противоречие с помощью инструкции SET ANSI_NULL_DEFAULT_ON ON SQL. Эта инструкция вызывает на сервере использование по умолчанию значений NULL для столбцов, для которых не определена в явном виде возможность сохранения значений NULL. Исключением являются столбцы типа bit и столбцы с определяемыми пользователем типами данных.

При подключении к SQL Server версии 4.2x драйвер SQL Server добавляет спецификацию Null в описание каждого столбца, создаваемого в инструкции CREATE TABLE, в которой такая спецификация не задается явно. (Исключением являются столбцы типа BIT, в которых пустые значения не допускаются). Спецификация NULL допускается также в описание каждого столбца в инструкции ALTER TABLE (также для всех столбцов, кроме типа BIT).


Использование указателей наборов записей ODBC

SQL Server 6.0 поддерживает указатели наборов записей, создаваемые ядром базы данных. Версии 2.5 драйвера SQL Server была расширена, чтобы обеспечить возможность использования этой характеристики. В данном разделе приводится краткое описание способов использования указателей наборов записей на сервере с помощью интерфейса программирования приложений ODBC.

Модель указателей наборов записей ODBC

ODBC поддерживает модель указателей наборов записей, допускающую существование нескольких типов указателей наборов записей, прокрутку записей в наборе, параметры конкурентного доступа и доступ к отдельным строкам, а также возможность блоковой выборки. В отличие от ANSI SQL, ODBC не требует явного вызова функций API для описания, открытия или закрытия указателей наборов записей. Указатели наборов записей создаются автоматически при выполнении инструкций SQLExecDirect или SQLPrepare + SQLExecute на основании параметров, указанных в инструкции.

Инструкции типа A и типа B

Драйвер SQL Server использует инструкции двух типов, типа A и типа B.

Инструкция типа A определяется как любая инструкция, использующая настройку по умолчанию для каждого из следующих параметров.

Параметр	По умолчанию
SQL_CONCURRENCY	SQL_CONCUR_READ_ONLY
SQL_CURSOR_TYPE	SQL_CURSOR_FORWARD_ONLY
SQL_ROWSET_SIZE	1
Инструкции типа A не используют указатели наборов записей на сервере. Вместо этого на сервере выполняется запрос, и в приложение передается результирующий набор записей. Драйвер SQL Server позволяет выполнять функции SQLFetch и SQLExtendedFetch (пользователь имеет возможность изменить размер набора записей после открытия указателя и извлекать строки по блокам). Однако подключение между клиентом и сервером останется занятым, пока не будут загружены все данные (т.е. пока не будет достигнут конец набора записей) или пока не будет закрыт указатель. Данный параметр обеспечивает быстрое выполнение в тех случаях, когда требуется последовательно загрузить все записи и нет необходимости выполнять их обновление. Поскольку указатели наборов записей на сервере не используются, операции позиционирования (с помощью предложения WHERE CURRENT OF) в инструкциях типа A выполнить невозможно

Инструкция типа B определяется как любая инструкция, не использующая настройку по умолчанию для перечисленных выше параметров. При выполнении инструкций типа B драйвер в большинстве случаев использует указатели наборов записей на сервере (см. перечень ограничений в разделе Создание указателей наборов записей).


Преимущества использования указателей наборов записей на сервере

Реализация в версии SQL Server 6.0 использования указателей наборов записей на сервере дает следующие преимущества.

·	Быстродействие. Если требуется получить доступ к небольшой части данных в наборе записей (ситуация, типичная для большинства операций поиска), использование указателей наборов записей на сервере позволяет повысить быстродействие, поскольку через сеть загружаются только необходимые данные, а не весь набор записей.

·	Дополнительные типы указателей. При использовании указателей наборов записей на сервере доступными являются только ключевые (keyset) и динамические указатели. Кроме того, библиотека указателей наборов записей поддерживает указатели наборов записей с последовательным доступом, обеспечивающие конкурентный доступ только для чтения, и статические указатели наборов записей, обеспечивающие доступ только для чтения с нежесткой блокировкой. Таким образом, указатели наборов записей на сервере обеспечивают широкий выбор режимов конкурентного доступа и типов наборов записей.

·	Более ясная семантика. Библиотека указателей имитирует обновление наборов записей за счет генерации инструкции SQL поиска и обновления. В некоторых случаях это может привести к нежелательным обновлениям.

·	Использование памяти. При использовании указателей наборов записей на сервере клиент не должен помещать во временный буфер большое количество данных или сохранять сведения о положении указателя. Эти функциональные характеристики обеспечивает сервер.

·	Множественные открытые указатели. При использовании указателей наборов записей на сервере подключение между клиентом и сервером не является занятым в промежутках времени между операциями с указателем. Это позволяет одновременно держать открытыми несколько указателей hstmts. Согласно спецификациям ODBC пользователь ограничивается использованием одного указателя на каждый дескриптор hstmt. Чтобы обойти ограничение на hstmt, налагаемое инструкциями типа A, следует изменить параметры инструкций таким образом, чтобы указатели наборов записей на сервере определялись инструкциями типа B.

См. также

Создание указателей наборов записей

Загрузка данных с помощью указателей наборов записей

Обновление указателей наборов записей

Закрытие указателей наборов записей


Создание указателей наборов записей

При использовании указателей наборов записей в ODBC существенным является описание указателя в инструкции SQL, переданной как аргумент в функцию SQLExecuteDirect или SQLPrepare/SQLExecute. При создании указателей наборов записей с помощью драйвера SQL Server действуют следующие правила.

·	Указатели наборов записей на сервере создаются только в инструкциях, которые начинаются с инструкции SELECT, EXEC[ute] имя_процедуры или предложения {call имя_процедуры}. В противном случае инструкция рассматривается как инструкция типа A. Указатели наборов записей на сервере в пакетных операциях SQL не создаются. Эти инструкции рассматриваются как инструкции типа A.

·	Если при запросе на создание динамического или ключевого указателя набора записей отсутствует уникальный индекс для каждой таблицы, ссылка на которую имеется в описании указателя, сервер создает статический указатель набора записей, а драйвер возвращает состояние SQL_SUCCESS_WITH_INFO.

·	SQL Server позволяет создавать указатели как для основных таблиц, так и для представлений. Кроме того, можно открывать указатели наборов записей в запросах, включающих объединения таблиц и/или статистические операторы. Однако не допускается использование в описании указателя ключевых слов COMPUTE, COMPUTE BY, FOR BROWSE и INTO.

·	Если в описании указателя содержится операция UNION, UNION ALL, внешнее объединение, GROUP BY с или без предикатов HAVING или DISTINCT, всегда создается статический указатель, вне зависимости от затребованного типа. Драйвер при этом возвращает состояние SQL_SUCCESS_WITH_INFO.

·	Если выдается требование на создание динамического указателя, а в описании указателя содержится подчиненный запрос или предложение ORDER BY, которому не отвечает уникальный индекс, сервер создает ключевой указатель набора записей, а драйвер возвращает состояние SQL_SUCCESS_WITH_INFO.

·	Если выдается требование на конкурентный доступ к различным версиям строк, а в каждой таблице, включенной в описание указателя нет столбца TIMESTAMP, то сервер организует конкурентный доступ с использованием значений, а драйвер возвращает состояние SQL_SUCCESS_WITH_INFO.

·	Указатель набора записей удается создать с помощью функции SQLExecDirect (Exec имя_процедуры или {Call имя_процедуры}) только в том случае, когда процедура содержит одну инструкцию SELECT и ничего больше. В противном случае SQL Server генерирует сообщение об ошибке. Из-за этого ограничения невозможно использовать указатели наборов записей на сервере с функциями каталогов ODBC (которые используют сохраненные процедуры с множественными инструкциями SELECT).

·	При выполнении пакетных операций с множественными инструкциями SELECT автоматически создаются указатели наборов записей с характеристиками, отвечающими инструкциям типа A. (Исключением является случай, когда первым вызовом является вызов инструкции SELECT, EXECUTE или канонический вызов процедуры ODBC, при этом драйвер SQL Server генерирует сообщение об ошибке).

Для ключевых указателей наборов записей допускается заполнение в асинхронном режиме (см. в документации SQL Server описание процедуры sp_configure). Асинхронное заполнение ключевого набора записей не влияет на результат вызова любых функций API ODBC, за исключением SQLRowCount.

В следующих разделах обсуждаются функции ODBC, используемые при создании указателей наборов записей.

SQLSetStmtOption

SQLSetScrollOptions

SQLSetConnectOption

SQLSetCursorName

SQLGetCursorName

SQLGetStmtOption

SQLGetInfo


SQLSetStmtOption

Функция SQLSetStmtOption позволяет задавать в вызывающей процедуре различные параметры на уровне инструкции. Поддерживаются следующие параметры, затрагивающие указатели наборов записей.

Параметр	Значение
SQL_CONCURRENCY	SQL_CONCUR_READ_ONLY SQL_CONCUR_LOCKING SQL_CONCUR_ROWVER SQL_CONCUR_VALUES
SQL_CURSOR_TYPE	SQL_CURSOR_FORWARD_ONLY SQL_CURSOR_STATIC SQL_CURSOR_KEYSET_DRIVEN SQL_CURSOR_DYNAMIC
SQL_ROWSET_SIZE	Целочисленное значение, задающее число строк в наборе записей, т.е. число строк, возвращаемых при каждом вызове SQLExtendedFetch. Значение по умолчанию 1.
SQL_BIND_TYPE	Целочисленное значение, задающее ориентацию привязки, которая будет использоваться при вызове SQLExtendedFetch для соответствующего hstmt. Допускается привязка по строкам и по столбцам.
SQL Server поддерживает статические указатели наборов записей с доступом только для чтения, которые открывают с помощью драйвера SQL Server. В приложениях, требующих создания обновляемых статических указателей наборов записей, следует выбирать реализацию из библиотеки указателей, задавая для параметра SQL_ODBC_CURSORS значение SQL_CUR_USE_ODBC. Указатели наборов записей, которые обеспечиваются библиотекой указателей, реализуются на стороне клиента. Все данные помещаются во временный буфер. Операции обновления и удаления осуществляются с помощью предложения WHERE, применяемого к значениям во временном буфере.

Указатели наборов записей, реализуемые на сервере (с последовательным доступом, ключевые, динамические, статические с доступом только для чтения) могут определяться с параметром конкурентного доступа, задающим следующие режимы: только чтение, блокировка, сравнение строк по версиям и сравнение строк по значениям. Указатели наборов записей, реализуемые с помощью библиотеки указателей, допускают только чтение или сравнение строк по значениям.

Указатели наборов записей смешанных типов не поддерживаются. Значение SQL_KEYSET_SIZE автоматически преобразуется к 0, если задано ненулевое значение.


SQLSetScrollOptions

Функция SQLSetScrollOptions позволяет задавать в вызывающей процедуре параметры, определяющие характеристики указателя набора записей. В версии ODBC 2.0 эти параметры заменены на соответствующие параметры функции SQLSetStmtOption и поддерживаются только для совместимости с предыдущими версиями. Параметры разделяются на три категории:

Параметр	Значение
Конкурентный доступ	SQL_CONCUR_READ_ONLY SQL_CONCUR_LOCK SQL_CONCUR_ROWVER SQL_CONCUR_VALUES
Тип	SQL_CURSOR_FORWARD_ONLY SQL_CURSOR_STATIC SQL_CURSOR_KEYSET_DRIVEN SQL_CURSOR_DYNAMIC
Размер набора записей	Целочисленное значение


SQLSetConnectOption

Функция SQLSetConnectOption позволяет задавать в вызывающей процедуре параметры подключения.

Поддерживаются следующие параметры, затрагивающие указатели наборов записей.

Параметр	Значение
SQL_ODBC_CURSORS	SQL_CUR_USE_IF_NEEDED SQL_CUR_USE_ODBC SQL_CUR_USE_DRIVER
SQL_TXN_ISOLATION	SQL_TXN_READ_UNCOMMITTED SQL_TXN_READ_COMMITTED SQL_TXN_REPEATABLE_READ SQL_TXN_SERIALIZABLE SQL_TXN_VERSIONING не поддерживается (SQL Server рассматривает повторное чтение как серийное).
Параметр, определяемый драйвером	SQL_PRESERVE_CURSORS позволяет выбирать между закрытием и сохранением указателя при занесении/свертывании транзакций. По умолчанию задается закрытие указателя.


SQLSetCursorName

Функция SQLSetCursorName связывает имя указателя набора записей с активным дескриптором hstmt. Если имя указателя не задано, оно создается автоматически.


SQLGetCursorName

Функция SQLGetCursorName возвращает имя указателя набора записей, связанное с указанным дескриптором hstmt. Имя указателя может задаваться пользователем или автоматически генерироваться системой. Вызов данной функции становится возможным только после вызова SQLSetCursorName или после открытия указателя набора записей (в операциях ExecuteDirect, Execute или Catalog). Имя указателя является действительным в течение времени жизни дескриптора hstmt. Если указатель набора записей закрывается и вместо него открывается новый, драйвер повторно использует старое имя. Имена указателя набора записей требуется указывать при выполнении операций обновления и удаления с позиционированием записей.


SQLGetStmtOption

Функция SQLGetStmtOption возвращает текущие значения параметров, заданных при вызове SQLSetStmtOption, а также состояние некоторых дополнительных флагов. SQL_ROW_NUMBER указывает номер текущей строки в результирующем наборе записей. Этот параметр поддерживается для ключевых и статических указателей; в остальных случаях возвращается 0.


SQLGetInfo

Функция SQLGetInfo возвращает сведения о конкретном драйвере и источнике данных. Перечень значений, определяемых драйвером SQL Server, см. в разделе Возвращаемые значения функции SQLGetInfo.


Загрузка данных с помощью указателей наборов записей

Существуют два способа загрузки данных с помощью указателей наборов записей.

·	Пользователь имеет возможность осуществить привязку столбцов результирующего набора записей к местам постоянного сохранения данных с помощью функции SQLBindCol, а затем перейти на следующую строку в результирующем наборе с помощью функции. При блоковой загрузке данных имеется возможность осуществить привязку столбцов к массивам, а затем использовать SQLExtendedFetch. Драйвер SQL Server поддерживает привязку как по строкам, так и по столбцам. Необходимо помнить, что при использовании указателей наборов записей на сервере каждая операция загрузки или расширенной загрузки требует обращения к серверу. В промежутках между такими обращениями подключение остается свободным. Все необходимые сведения (например, текущее положение указателя) отслеживаются сервером. Кроме того, операции с указателем набора записей не обязаны выполняться последовательно. Сервер позволяет перемещать указатель вперед или назад относительно текущей позиции. Пользователь имеет также возможность установить указатель в результирующем наборе записей, используя абсолютный номер строки (за исключением случая динамического указателя наборов записей).

·	Имеется также возможность загружать данные без привязки столбцов (без выделения постоянного места сохранения данных). Для столбцов без привязки следует с помощью функции SQLFetch или SQLExtendedFetch установить указатель на следующую строку и вызвать SQLGetData для конкретных столбцов. Допускаются множественные вызовы SQLGetData для одного столбца, что позволяет считывать данные с накоплением. Это полезно при чтении большого количества данных из столбца, содержащего текст или рисунки. Необходимо помнить, однако, что подключение остается занятым, пока не будут считаны все данные из столбца. При вызове функции SQLSetPos с параметром позиции драйвер SQL сервер сбрасывает оставшиеся данные и освобождает подключение, позволяя использовать его для работы с другим дескриптором hstmt.

Считывание данных из одной строки для некоторых столбцов может выполняться с привязкой, а для других без привязки.

При загрузке строк, содержащих столбцы типа text и image с потенциально большими значениями, не следует осуществлять привязку таких столбцов, если доступ к текстовым данным не требуется. При операции расширенного извлечения данных загружаемая строка будет содержать только дескриптор textptr для столбца без привязки, в отличие от описанного выше случая полной загрузки столбца, содержащего текстовые данные.

В следующих разделах обсуждаются соответствующие функции ODBC:

SQLFetch

SQLExtendedFetch

SQLRowCount


SQLFetch

Функция SQLFetch извлекает одну строку из результирующего набора записей. Нельзя одновременно вызывать эту функцию и SQLExtendedFetch для одного указателя набора записей. Кроме того, функция SQLFetch обеспечивает только последовательный доступ.


SQLExtendedFetch

Функция SQLExtendedFetch возвращает в приложение набор строк, определяемый функцией SQLSetStmtOption. В качестве входных параметров эта функция принимает дескриптор инструкции, параметр типа загрузки и номер обрабатываемой строки. Возвращается число обработанных строк и (в необязательном порядке) массив, содержащий сведения о состоянии для каждой строки.

Поддерживаются следующие типы загрузки:

SQL_FETCH_NEXT
(требуется для указателя типа SQL_CURSOR_FORWARD_ONLY)

SQL_FETCH_FIRST

SQL_FETCH_LAST

SQL_FETCH_PRIOR

SQL_FETCH_ABSOLUTE
(не поддерживается для динамического указателя)

SQL_FETCH_RELATIVE

Типы SQL_FETCH_BOOKMARK и SQL_FETCH_RESUME не поддерживаются.


SQLRowCount

Если эта функция вызывается после открытия указателя набора записей, и указатель имеет тип ключевого или статического набора записей, функция SQLRowCount возвращает число строк в результирующем наборе записей. Для динамических указателей наборов записей SQLRowCount всегда возвращает значение –1. Если ключевой набор записей заполняется в асинхронном режиме (см. в документации SQL Server описание процедуры sp_configure), функция SQLRowCount возвращает значение –1 до тех пор, пока набор не будет заполнен полностью.


Обновление указателей наборов записей

Строки данных обычно обновляются по одной (в функции SQLSetPos имеется параметр, позволяющий обновит весь набор строк) при первом позиционировании указателя до указанной строки. Установить указатель на конкретную строку можно следующими способами:

·	вызвать SQLFetch требуемое число раз;

·	вызвать SQLExtendedFetch требуемое число раз;

·	вызвать SQLSetPos с параметром SQL_POSITION.

Существуют два способа изменения данных в результирующем наборе записей.

·	Вызвать инструкцию UPDATE .... WHERE CURRENT OF имя_указателя или DELETE WHERE CURRENT OF имя_указателя для обновления или удаления строки, на которую установлен указатель. Инструкции UPDATE или DELETE с позиционированием должны вызываться для разных дескрипторов hstmt в одном подключении. При этом требуется имя указателя набора записей (которое можно задать в явном виде с помощью функции SQLSetCursorName). Такой прием делает возможной одновременную работу с несколькими указателями наборов записей.

·	Вызвать функцию SQLSetPos для добавления, удаления или обновления строк данных. Функция API SQLSetPos поддерживает параметры, позволяющие указать требуемую операцию, номер адресуемой строки и способ блокировки строки. Применение функции SQLSetPos возможно только для наборов строк, извлекаемых с помощью функции SQLExtendedFetch.

В следующих разделах обсуждаются соответствующие функции ODBC:

SQLSetPos

SQLRowCount


SQLSetPos

Функция SQLSetPos обеспечивает в приложении установку указателя набора записей в конкретной строке и выполнение операции над этой строкой. В качестве входных параметров функция принимает дескриптор инструкции, положение строки в наборе строк (над которым выполняется операция), тип операции и дополнительный параметр, описывающий тип блокировки строки после выполнения операции.

Аргумент irow задает номер строки (в наборе строк), над которой выполняется операция. Если irow = 0, операция выполняется над всем набором строк.

Поддерживаются следующие операции:

SQL_POSITION

SQL_REFRESH

SQL_UPDATE

SQL_DELETE

SQL_ADD

Поддерживаются следующие типы блокировок:

SQL_LOCK_NO_CHANGE

Следует отметить, что в случае, когда строка помечается как удаленная (SQL_ROW_DELETED), а затем вставляется строка с тем же значением ключа, то после операции SQL_REFRESH будет показана новая строка (SQL_ROW_SUCCESS) в старой позиции.


SQLRowCount

Функция SQLRowCount возвращает номер строки, к которой будут применяться инструкции UPDATE, INSERT или DELETE, а также операции SQL_UPDATE, SQL_ADD или SQL_DELETE в функции SQLSetPos. Функцию SQLRowCount можно вызывать после обновления базы данных.


Закрытие указателей наборов записей

Указатели наборов записей автоматически закрываются при занесении или свертывании транзакции. Драйвер SQL Server поддерживает специфический параметр подключения, SQL_PRESERVE_CURSORS, имеющий приоритет над настройкой для указателя наборов записей на сервере. Если для данного параметра задается значение SQL_PC_ON, указатели наборов записей остаются открытыми, а состояние указателя сохраняется при занесении или свертывании транзакции.

В следующих разделах обсуждаются соответствующие функции ODBC:

SQLFreeStmt

SQLTransact


SQLFreeStmt

Функция SQLFreeStmt останавливает операции, связанные с выполнением конкретной инструкции, закрывает все открытые указатели наборов записей, отбрасывает отложенные результаты и в необязательном порядке освобождает все ресурсы, связанные с дескриптором инструкции.

Поддерживаются следующие параметры, затрагивающие указатели наборов записей:

SQL_CLOSE

SQL_DROP


SQLTransact

Функция SQLTransact выдает требование на занесение или свертывание операции для всех активных операций, связанных с подключением. Если параметр SQL_PRESERVE_CURSORS получил значение SQL_PC_ON, все открытые указатели наборов записей на сервере остаются открытыми. Указатели наборов записей по умолчанию закрываются при занесении или свертывании транзакций.


Реализация функций API ODBC

Драйвер SQL Server поддерживает трансляцию библиотек динамической компоновки, а также перечисленных ниже функции. Для получения дополнительных сведений о реализации поддерживаемых функций выберите имя функции.

Функция	Описание
SQLBrowseConnect	Функция SQLBrowseConnect использует ключевые слова трех уровней: 1. DSN, DRIVER 2. SERVER, UID, PWD, APP и WSID 3. DATABASE и LANGUAGE
SQLConnect	Функция SQLConnect поддерживает настройку по умолчанию DATABASE и LANGUAGE.
SQLDriverConnect	Функция SQLDriverConnect использует ключевые слова DSN, DRIVER, SERVER, UID, PWD, APP, WSID, DATABASE и LANGUAGE.
SQLColAttributes, SQLDescribeCol и SQLNumResultCols	Если любая из этих функций вызывается после подготовки инструкции SELECT, но до выполнения этой инструкции, драйвер SQL Server использует инструкцию SET FMTONLY, задающую для SQL Server вывод требуемых сведений о результирующем наборе записей.
SQLConfigDataSource	Функция SQLConfigDataSource динамически добавляет, изменяет или удаляет источник данных с помощью ключевых слов, задающих параметры подключения.
SQLPrepare	SQL Server непосредственно не поддерживает модель подготовки и выполнения ODBC. Чтобы подготовить инструкцию SQL, драйвер SQL Server создает временную процедуру, которая выполняет компиляцию для последующего выполнения инструкции. Следует отметить, что генерацию сохраненных процедур можно отключить для функции SQLPrepare либо в диалоговом окне ODBC настройки драйвера SQL Server, либо с помощью функции SQLSetConnectOption. При отключении генерации сохраненных процедур, сохраненная инструкция SQL посылается на сервер при каждом ее выполнении.
SQLParamOptions	Функция SQLParamOptions позволяет приложению указать массив значения для параметров, присваиваемых с помощью функции SQLBindParameter. При вызове SQLParamOptions с аргументом crow, превышающим 1, драйвер генерирует пакетную инструкцию SQL или пакетную сохраненную процедуру, выполняющую несколько инструкций SQL.
SQLDescribeParam	Функция SQLDescribeParam возвращает описание для маркера параметра, связанного с подготовленной инструкцией SQL.
SQLRowCount	Если данная функция вызывается после команды открытия указателя набора записей, и указатель имеет тип ключевого или статического, функция возвращает число строк в результирующем наборе записей. Для динамических указателей наборов записей SQLRowCount всегда возвращает –1. Если ключевой набор записей заполняется в асинхронном режиме, SQLRowCount возвращает –1 до полного заполнения набора записей.
SQLTablePrivileges	Драйвер не поддерживает образцы поиска для параметров владельца таблицы и имени таблицы.
SQLTables	Драйвер не поддерживает образцы поиска для параметра идентификатора таблицы.


SQLBrowseConnect

Функция SQLBrowseConnect использует при подключении данные трех уровней. В следующей таблице для каждого ключевого слова указано, имеется ли список допустимых возвращаемых значений и является ли ключевое слово необязательным (НОБ).

Уровень	Слово	Список значений	НОБ	Описание
1	DSN	Отсутствует	Нет	Имя источника данных, возвращаемое функцией SQLDataSources. Если используется ключевое слово DRIVER, слово DSN не используется.
	DRIVER	Отсутствует	Нет	Имя драйвера, возвращаемое функцией SQLDrivers. Если используется ключевое слово DSN, слово DRIVER не используется. Имя драйвера SQL Server имеет вид {SQL Server}. (Для 16-разрядных программ имя 32-разрядного драйвера имеет вид {SQL Server (32 bit)}.)
2	SERVER	Да	Нет	Имя сервера сети, на котором находится источник данных. В операционной системе Microsoft Windows NT вместо имени сервера можно ввести элемент «(local)». В этом случае будет использоваться локальная копия SQL Server, даже при использовании не сетевой версии. Следует отметить, что при указании элемента «(local)» для 16-разрядного драйвера SQL Server, необходимо установить петлю «MS Loopback Adapter».
	UID	Нет	Да	Идентификатор пользователя.
	PWD	Нет	Да (по выбору)	Пароль, определяемый пользователем.
	APP	Нет	Да	Имя приложения (AppName), вызывающего SQLBrowseConnect.
	WSID	Нет	Да	Идентификатор рабочей станции. Обычно, сетевое имя компьютера, на котором находится приложение.
3	DATABASE	Да	Да	Имя базы данных SQL Server.
	LANGUAGE	Да	Да	Языковая настройка SQL Server.
Функция SQLBrowseConnect игнорирует значения параметров Database и Language, сохраняемые в описаниях источников данных ODBC. Если в строке подключения, переданной в функцию SQLBrowseConnect, база данных или язык указаны неверно, то функция SQLBrowseConnect возвращает SQL_NEED_DATA и атрибуты подключения уровня 3.

Функция SQLBrowseConnect не проверяет возможность доступа пользователя ко всем базам данных, указанным с помощью ключевого слова DATABASE. Если пользователь не имеет доступа к выбранной базе данных, SQLBrowseConnect возвращает SQL_NEED_DATA и атрибуты подключения уровня 3.

См. также

SQLConnect

SQLDriverConnect


SQLConnect

Функция SQLConnect использует следующие ключевые слова:

Параметр	Реализация
DSN	Имя источника данных, возвращаемое функцией SQLDataSources.
UID	Идентификатор пользователя.
AuthStr	Указанная пользователем строка проверки подлинности (обычно, пароль).
Функция SQLConnect загружает значение ключевого слова LANGUAGE из описания источника данных ODBC. Если драйвер SQL Server не может использовать указанный язык, используется стандартный язык указанного пользователя, а функция SQLConnect возвращает SQL_SUCCESS_WITH_INFO. Если драйвер SQL Server не может использовать стандартный язык указанного пользователя, SQLConnect возвращает SQL_ERROR.

Функция SQLConnect загружает значение ключевого слова DATABASE из описания источника данных ODBC. Если драйвер SQL Server не может использовать указанную базу данных, используется стандартная база данных указанного пользователя, а функция SQLConnect возвращает SQL_SUCCESS_WITH_INFO. Если драйвер SQL Server не может использовать стандартную базу данных указанного пользователя, SQLConnect возвращает SQL_ERROR.

См. также

SQLBrowseConnect

SQLDriverConnect


SQLDriverConnect

Строка подключения SQLDriverConnect использует следующие ключевые слова:

Слово	Описание
DSN	Имя источника данных, возвращаемое функцией SQLDataSources. Если используется ключевое слово DRIVER, слово DSN не используется.
DRIVER	Имя драйвера, возвращаемое функцией SQLDrivers. Если используется ключевое слово DSN, слово DRIVER не используется. Имя драйвера SQL Server имеет вид {SQL Server}.
SERVER	Имя сервера сети, на котором находится источник данных. В операционной системе Microsoft Windows NT вместо имени сервера можно ввести элемент «(local)». В этом случае будет использоваться локальная копия SQL Server, даже при использовании не сетевой версии. Следует отметить, что при указании элемента «(local)» для 16-разрядного драйвера SQL Server, необходимо установить петлю «MS Loopback Adapter».
UID	Идентификатор пользователя.
PWD	Пароль, определяемый пользователем.
APP	Имя приложения, вызывающего SQLDriverConnect (необязательное).
WSID	Идентификатор рабочей станции. Обычно, сетевое имя компьютера, на котором находится приложение (необязательное).
DATABASE	Имя базы данных SQL Server (необязательное).
LANGUAGE	Языковая настройка SQL Server (необязательная).
Функция SQLDriverConnect использует значения ключевых слов, введенные в диалоговое окно (если оно открывается). Если значение ключевого слова не задано в диалоговом окне, SQLDriverConnect использует значение из строки подключения. Если значение не задано в строке подключения, используется значение из файла ODBC.INI.

Если аргумент fDriverCompletion имеет значение SQL_DRIVER_NOPROMPT или SQL_DRIVER_COMPLETE_REQUIRED, то при указании в строке подключения неверного имени базы данных или языковой настройки функция SQLDriverConnect возвращает SQL_ERROR.

Если аргумент fDriverCompletion имеет значение SQL_DRIVER_NOPROMPT или SQL_DRIVER_COMPLETE_REQUIRED, то при указании в описании источника данных ODBC неверного имени базы данных или языковой настройки функция SQLDriverConnect использует стандартный язык или базу данных указанного пользователя и возвращает SQL_SUCCESS_WITH_INFO.

Если аргумент fDriverCompletion имеет значение SQL_DRIVER_COMPLETE или SQL_DRIVER_PROMPT, то при указании неверного имени базы данных или языковой настройки функция SQLDriverConnect повторно открывает диалоговое окно.

Например, чтобы подключиться к источнику данных «Human Resources» на сервере HRSERVER с помощью идентификатора пользователя Smith и пароля «Sesame», следует использовать такую строку подключения:

DSN=Human Resources;UID=Smith;PWD=Sesame

Чтобы указать базу данных «Payroll» на том же сервере, введите следующую строку подключения:

DSN=Human Resources;UID=Smith;PWD=Sesame;DATABASE=Payroll

Чтобы указать драйвер SQL (с именем {SQL Server}) и имя сервера прямо (не используя параметр DSN), можно использовать следующую строку подключения:

DRIVER={SQL Server};SERVER=hrserver;UID=Smith;PWD=Sesame;
    DATABASE=Payroll

См. также

SQLBrowseConnect

SQLConnect


SQLColAttributes, SQLDescribeCol и SQLNumResultCols

Microsoft SQL Server возвращает сведения о результирующем наборе записей до возвращения данных в наборе записей. Драйвер SQL Server возвращает эти сведения в приложение с помощью функций SQLColAttributes, SQLDescribeCol и SQLNumResultCols.

При подключении к SQL Server 6.0 драйвер SQL Server использует инструкцию SET FMTONLY для загрузки сведений о результирующем наборе записей.

Если при подключении к SQL Server версии 4.2x приложение вызывает любую из этих функций после подготовки инструкции SELECT, но до ее выполнения, драйвер SQL Server выдает инструкцию SELECT с предложением WHERE 1=2. Это заставляет SQL Server генерировать результирующий набор записей, не содержащий ни одной строки, но содержащий сведения о результирующем наборе записей.

Примечание.   При подключении к SQL Server 4.2x функции SQLColAttributes, SQLDescribeCol и SQLNumResultCols не могут возвращать сведения о результирующем наборе записей, создаваемом в данной процедуре, если эта процедура была подготовлена, но не выполнена. Если инструкция SELECT является первой инструкцией в пакетной инструкции, и используется собственная грамматика SQL Server (без точек с запятой между инструкциями), результаты вызова этих функций становятся непредсказуемыми. Следует отметить, что слово «SELECT» должно быть первой командой в буфере. Если перед словом «SELECT» в подготавливаемой инструкции имеются другие слова, предложение «WHERE 1=2» в инструкцию SELECT добавлено не будет, и возвращение сведений о результирующем наборе записей станет невозможным.


SQLConfigDataSource

Функция SQLConfigDataSource используется для динамического добавления, изменения или удаления источника данных с помощью следующих ключевых слов. Для этой функции обязательным является только ключевое слово SERVER; все остальные ключевые слова являются необязательными.

Ключевое слово	Описание
ADDRESS	Сетевой адрес СУБД SQL Server, из которой драйвер загружает данные.
DATABASE	Имя базы данных SQL Server.
DESCRIPTION	Описание данных в источник данных.
LANGUAGE	Языковая настройка SQL Server.
NETWORK	Сетевая библиотека, используемая при подключении платформ, на которых находятся SQL Server и драйвер SQL Server.
OEMTOANSI	Включение преобразования набора символов OEM в набор символов ANSI, если компьютеры клиента SQL Server и SQL Server используют один и тот же набор символов, не являющийся набором ANSI. Допустимыми значениями являются YES (включение) и NO (отключение). Значение по умолчанию задается при настройке.
SERVER	Имя сетевого компьютера, на котором находится источник данных.
TRANSLATIONDLL	Имя библиотеки динамической компоновки, осуществляющей трансляцию данных при их передаче между приложением и источником данных.
TRANSLATIONNAME	Имя транслятора, выполняющего трансляцию данных при их передаче между приложением и источником данных.
TRANSLATIONOPTION	Включение режима трансляции данных при их передаче между приложением и источником данных.
USEPROCFORPREPARE	Отключение генерации сохраненных процедур для функции SQLPrepare. Допустимыми значениями являются NO (отключение) индекс YES (включение). Значением по умолчанию (задаваемым в диалоговом окне настройки) является YES.
Следует отметить, что пары ключевых слов в строках SQLConfigDataSource должны заканчиваться пустым байтом (\0). Сама строка также должна (\0) заканчиваться пустым байтом. Например:

DSN=Human Resources\0SERVER=hrserver\0ADDRESS=hrnetaddr\0
NETWORK=DBMSSOCN\0DATABASE=payroll\0\0


SQLPrepare

SQL Server непосредственно не поддерживает модель подготовки и выполнения ODBC.

Вначале, на основе инструкции создается временная сохраненная процедура, поскольку сохранение процедуры является эффективным способом выполнения инструкции несколько раз. Процедура получает имя "#odbc#имяидентификатор", где имя представляет до 6 символов из имени пользователя, а идентификатор является идентификатором инструкции длиной до 8 цифр. Если параметры были заданы, процедура создается во время подготовки. Если не все параметры были заданы во время подготовки или если хотя бы один из параметров был изменен после создания процедуры, процедура создается во время выполнения. В результате, функция SQLExecute может возвращать любые ошибки, которые может возвращать функция SQLPrepare.

Если инструкция CREATE PROCEDURE возвращает ошибку, функция SQLPrepare посылает на SQL Server инструкцию с параметром SET NOEXEC или SET PARSEONLY (в зависимости от типа инструкции). SQL Server проверяет синтаксис инструкции и возвращает обнаруженные ошибки.

Если по каким-либо причинам пользователь не может создать сохраненную процедуру (например, из-за недостаточных разрешений), драйвер SQL Server не использует сохраненную процедуру, а посылает на сервер инструкцию SQL при каждом вызове SQLExecute.

Пользователь имеет возможность отключить генерацию сохраненных процедур для функции SQLPrepare. При отключении генерации сохраненных процедур, инструкция SQL сохраняется и повторно посылается на сервер при вызове во время выполнения. Генерацию сохраненных процедур можно отключить одним из двух способов:

·	сняв флажок «Генерация хранимой процедуры для подготовленной инструкции» в диалоговом окне Установка ODBC сервера SQL;

·	задав для параметра SQL_USE_PROCEDURE_FOR_PREPARE функции SQLSetConnectOption значение SQL_UP_OFF.

После отключения генерации сохраненных процедур и выполнении сохраненных инструкций, любая проверка синтаксиса откладывается до времени выполнения.

Следует отметить, что при выполнении инструкции SET NOCOUNT ON множественные инструкции, включенные в сохраненную процедуру, не приводят к созданию множественных результирующих наборов записей. Подсчет числа строк, задаваемый инструкциями SQL внутри сохраненной процедуры, игнорируется драйвером.


SQLParamOptions

Функция SQLParamOptions позволяет приложению указать массив значения для параметров, присваиваемых с помощью функции SQLBindParameter. При вызове SQLParamOptions с аргументом crow, превышающим 1, драйвер генерирует пакетную инструкцию SQL или пакетную сохраненную процедуру, выполняющую несколько инструкций SQL.

Функция SQLParamOptions обычно используется с инструкциями языка обработки данных. Любые инструкции язык определения данных, используемые вместе с функцией SQLParamOptions, будут иметь тот же результат, что и последовательное выполнение инструкции crow раз. Инструкции, не содержащие маркеры параметров, также будут выполняться crow раз.

Пакетные сохраненные процедуры могут применяться для функций SQLPrepare и SQLExecute и для канонического вызова процедур, не использующих данных, обновляемых при выполнении. Возвращаются выходные параметры сохраненной процедуры.

Пакетная инструкция SQL (называемая также событием языка) используется с командами SQL и для канонического вызова любых процедур, использующих данные, обновляемые при выполнении. Любые выходные параметры сохраненной процедуры не возвращаются. Если используется инструкция SELECT, будут возвращаться множественные результирующие наборы записей. Для их обработки в приложении должна использоваться функция SQLMoreResults. После возвращения успешного выполнения функциями SQLParamData, SQLExecDirect или SQLExecute, возвращаемый аргумент pirow вначале получает значение 1, а затем функция SQLMoreResults последовательно увеличивает это значение по мере обработки каждого набора записей.

SQLRowCount будет возвращать общее число строк, обработанных всеми инструкциями в пакетной инструкции SQL или в пакетной сохраненной процедуре, не содержащей ни одной инструкции SELECT. Если включить одну или несколько инструкций SELECT, значение, возвращаемое функцией SQLRowCount, становится неопределенным. Кроме того, если исходная инструкция SQL содержит множественные инструкции, значение, возвращаемое в аргументе pirow, может быть неверным.

При обработке пакетных инструкций SQL Server иногда возвращает ошибку. В некоторых случаях SQL Server отменяет только текущую команду и выполняет остаток пакета. В таких случаях выполнение одной или нескольких инструкций может оказаться сбойным, и функция SQLExecDirect, SQLExecute или SQLParamData возвращает ошибку SQL_ERROR. Значение, возвращаемое в аргументе pirow, будет сделано равным значению crow, поскольку обработанными окажутся все строки параметров. SQLError возвратит возникшую ошибку, но определить строку, в которой возникла ошибка, будет невозможно. Так как обработанными окажутся все строки параметров, повторная привязка и выполнение не являются необходимыми.

В других случаях ошибка приводит к тому, что SQL Server отменяет выполнение всего пакета. Для таких ошибок значение, возвращаемое в pirow, содержит номер соответствующей строки параметра. Чтобы обработать все строки параметров, следует выполнить повторную привязку и продолжить выполнение.

Если в параметре имеет место усечение данных, обработка продолжается для остальных параметров. Возвращается SQL_SUCCESS_WITH_INFO и сообщение с предупреждением. Однако при возникновении на стороне клиента ошибки для одного из параметров (например, ошибки преобразования) прекращается выполнение всего пакета, и не выполняется ни одна из строк.

Когда функция SQLParamData возвращает SQL_NEED_DATA, значение pirow обновляется по мере обработки данных, обновляемых при выполнении, а окончательное обновление значения pirow функцией SQLParamData выполняется с учетом любых ошибок, возникающих при выполнении. Таким образом, значение pirow при обработке параметров данных, обновляемых при выполнении, может оказаться превышающим значение этого аргумента после остановки выполнения из-за возникновения ошибки.

При подключении к SQL Server 4.2x для функции SQLParamOptions существуют следующие ограничения.

·	Размер одного события языка для SQL Server 4.2x ограничивается примерно 128 000 байт. Если вызов SQLParamOptions приводит к превышению этого предела, драйвер возвращает сообщение об ошибке SQL Server.

·	SQL Server 4.2x не поддерживает пакетные сохраненные процедуры. Таким образом, любые выходные параметры сохраненных процедур не возвращаются.

Следует отметить, что если в pirow  передается любое непустое значение, драйвер продолжает помещать в этот адрес памяти текущий номер строки, даже при эффективном отключении SQLParamOptions с помощью значения 1 для crow. В результате, если адрес pirow, переданный приложением становится недопустимым адресом (например, за счет выхода локальной переменной из области определения), может иметь место сбой драйвера.


SQLDescribeParam

Функция SQLDescribeParam возвращает описание маркера параметра, связанного с подготовленной инструкцией SQL.

ODBC требует правильного расположения маркеров параметров, как указано в документации разработчика Microsoft ODBC 2.0 Programmer's Reference and SDK Guide. Кроме того, драйвер не поддерживает следующие элементы:

·	вызов SQLDescribeParam после выполнения;

·	вызов SQLDescribeParam при вызовах сохраненных процедур. Рекомендуется использовать в сохраненных процедурах функцию SQLProcedureColumns;

·	расширение предложения Transact-SQL FROM на инструкции UPDATE индекс DELETE;

·	маркеры параметров в подключенном запросе. Драйвер в этом случае возвращает ошибку.


Поддержка языка SQL

Драйвер SQL Server полностью поддерживает основную грамматику языка SQL, за исключением ключевого слова USER. Кроме того, драйвер SQL Server поддерживает почти все инструкции SQL в расширенной грамматике ODBC. В соответствии с использованной версией ODBC драйвер SQL Server будет передавать на сервер SQL Server инструкции с использованием собственной грамматики SQL.

Более подробно о реализации и ограничениях грамматики ODBC SQL для драйвера SQL Server см. в следующих разделах справки.

Грамматические ограничения SQL

Не поддерживаемые элементы грамматики ODBC SQL

Разрешение вопросов со значениями Null


Грамматические ограничения SQL

Драйвер SQL Server и SQL Server накладывают следующие ограничения на программирование с использованием грамматики ODBC SQL:

Грамматика SQL	Ограничения
Ограничения на аргументы данных, обновляемых при выполнении	При использовании аргументов данных, обновляемых при выполнении, для передачи более 65 535 байт данных для столбцов типа SQL_LONGVARCHAR или SQL_LONGVARBINARY действует ряд ограничений. Подробнее см. в разделе Ограничения на аргументы данных, обновляемых при выполнении.
OUTER JOIN	Условия поиска для внешнего объединения можно задавать только с помощью соотношения равенства (=). Расширение внешнего объединения ODBC должно появляться последним в списке ссылок на таблицу. SQL Server не поддерживает как вложенные внешние объединения, так и внутренние объединения, вложенные во внешнее объединение. Таблица не может быть внутренней таблицей во внешнем объединении и одновременно участвовать во внутреннем объединении. Таблица не может быть внутренней таблицей во внешнем объединении и одновременно внешней таблицей в другом внешнем объединении. Допускается, однако, участие таблицы во внутреннем объединении и ее одновременное участие во внешнем объединении в качестве внешней таблицы.
Процедуры	Процедура может вызываться либо как первая инструкция в подготовленной пакетной инструкции, либо с помощью ключевого слова EXECUTE или в каноническом вызове процедур ODBC. Подробнее см. в разделе Ограничения при вызове процедур.


Ограничения на аргументы данных, обновляемых при выполнении

При использовании аргументов данных, обновляемых при выполнении, для передачи более 65 535 байт данных для столбцов типа SQL_LONGVARCHAR (текст) или SQL_LONGVARBINARY (рисунки) действуют следующие ограничения.

·	Аргумент может использоваться только как аргумент вставка_значения в инструкции INSERT.

·	Аргумент может использоваться только как аргумент выражение в предложении SET инструкции UPDATE.

·	Аргумент не может использоваться в инструкции с данными, обновляемыми при выполнении, если тип данных отличен от SQL_LONGVARCHAR или SQL_LONGVARBINARY.

·	Допускается использование любых типов данных в инструкции, не содержащей данные, обновляемые при выполнении.

·	Для значений NULL аргумент cbColDef функции SQLBindParameter и аргумент cbValueMax функции SQLPutData требуют значений SQL_NULL_DATA.

·	Отмена операции до ее завершения (вызов функции SQLPutData после того, как функция SQLParamData возвращает SQL_NEED_DATA) приводит к частичному обновлению. В обрабатываемый столбец, содержащий текст или рисунки, при отмене операции заносится промежуточное значение «прототипа», а любые данные, не подвергавшиеся обработке, остаются не измененными.


Ограничения при вызове процедур

Если выполняемая инструкция, запускающая процедуру, является первой инструкцией в пакете, ключевое слово EXECUTE не требуется. Если такая инструкция не является первой инструкцией, ключевое слово EXECUTE необходимо. Причиной этого является добавление драйвером SQL Server собственных инструкций SQL при подготовке инструкции. Таким образом, после подготовки инструкция уже не будет первой  инструкцией в пакете.

Для обеспечения максимальной совместимости следует вызывать процедуры с помощью расширения ODBC, разработанного для SQL. При работе с драйвером SQL Server подготовка инструкции, вызывающей процедуру (вместо ее прямого вызова) не дает преимуществ. Когда флажок «Генерация хранимой процедуры для подготовленной инструкции» установлен, драйвер SQL Server осуществляет подготовку инструкции, помещая ее в процедуру и компилируя эту процедуру.

Подготовку инструкции путем помещения ее в процедуру и компилирования процедуры можно отключить. Чтобы отключить использование сохраненных процедур для вызова SQLPrepare, снимите флажок «Генерация хранимой процедуры для подготовленной инструкции» в диалоговом окне Установка ODBC сервера SQL или задайте для параметра SQL_USE_PROCEDURE_FOR_PREPARE функции SQLSetConnectOption значение SQL_UP_OFF. Это обеспечит сохранение подготовленной инструкции и ее выполнение во время выполнения. При этом сохраненные процедуры не используются для вызова SQLPrepare. Кроме того, любая проверка синтаксиса откладывается до времени выполнения.

При выполнении инструкции SET NOCOUNT ON множественные инструкции, включенные в сохраненную процедуру, не приводят к созданию множественных результирующих наборов записей. Драйвер игнорирует результаты подсчета строк в инструкциях SQL внутри сохраненной процедуры.

Литералы как аргументы при вызовах сохраненных процедур

Не допускается передача литералов или значений NULL в аргументы сохраненной процедуры с типами datetime или smalldatetime.

Указатели наборов записей и сохраненные процедуры

Указатели наборов записей на сервере могут быть открыты только в сохраненной процедуре, содержащей единственную инструкцию SELECT. Использование сохраненной процедуры, не содержащей инструкций SELECT или содержащей несколько инструкций SELECT, приведет к ошибке. Из-за этого ограничения нельзя использовать указатели наборов записей на сервере с функциями каталогов ODBC.


Не поддерживаемые элементы грамматики ODBC SQL

Драйвер SQL Server все элементы основной и расширенной грамматики ODBC SQL со следующими исключениями.

Не поддерживаемые элементы	Описание
DAYOFWEEK	Скалярная функция DAYOFWEEK не поддерживается при подключении к SQL Server версии 4.2x. Функция поддерживается при подключении к SQL Server 6.0.
DELETE	Предложение WHERE CURRENT OF имя_указателя (DELETE с позиционированием) не поддерживается при подключении к SQL Server версии 4.2x.
DROP INDEX	Вместо одного аргумента имя_индекса необходимо использовать имя_таблицы, имя_индекса.
IEF	Ни одно из предложений расширения Integrity Enhancement Facility (IEF) не поддерживается при подключении к SQL Server версии 4.2x
MAX, MIN	Ключевое слово DISTINCT не поддерживается для этих функций.
SELECT	Предложение FOR UPDATE OF (инструкция SELECT-FOR-UPDATE) не поддерживается при подключении к SQL Server версии 4.2x.
UPDATE	Предложение WHERE CURRENT OF имя_указателя (UPDATE с позиционированием) не поддерживается при подключении к SQL Server версии 4.2x.
USER	Ключевого слово USER не поддерживается, за исключением предложения DEFAULT в расширении IEF.


Активные hstmt

Драйвер SQL Server позволяет иметь лишь один активный дескриптор hstmt, за исключением их использования с указателями наборов записей на сервере. Сведения возвращаются с помощью вызова функции SQLGetInfo с параметром SQL_ACTIVE_STATEMENTS. Дескриптор hstmt определяется как активный, если имеются отложенные результаты. В этом контексте результатами считаются любые данные, возвращаемые сервером SQL Server, такие как результирующий набор записей или подсчет числа строк, обработанных в инструкции UPDATE.

Примечание.   Статус активности для hstmt не связан с его состоянием. Например, если выполнена инструкция SELECT, которая не возвращает ни одной строки, инструкция не является активной, поскольку нет отложенных результатов. Однако для повторного выполнения инструкции необходимо закрыть связанный с ней указатель набора записей с помощью функции SQLFreeStmt.

Указатели наборов записей на сервере позволяют выполнять несколько активных инструкций для одного подключения к серверу SQL Server 6.0.

При подключении к SQL Server версии 4.2x драйвер SQL Server поддерживает только одну активную инструкцию на подключение. Библиотека указателей (поставляемая с драйвером SQL Server) позволяет приложениям использовать несколько активных инструкций на одно подключение.


Библиотека указателей

Библиотека указателей (поставляемая с драйвером SQL Server) позволяет приложениям использовать несколько активных инструкций на одно подключение, а также обновляемые указатели наборов записей, допускающие прокрутку. Для поддержки этих функциональных характеристик необходимо загрузить файлы библиотеки указателей (ODBCCURS.DLL (16-разрядная) или ODBCCR32.DLL (32-разрядная)). Функция SQLSetConnectOption позволяет указать способ использования библиотеки указателей, аргумент функция SQLSetStmtOption задать тип указателя набора записей, тип блокировки и размер набора записей.


Арифметические ошибки

При возникновении во время выполнения инструкции SQL арифметической ошибки, такой как деление на нуль или переполнение числового значения, инструкция отменяется. Часть результатов может быть отправлена клиенту и загружена в приложение до поступления в приложение уведомления об ошибке.

Драйвер задает для параметра ARITHABORT значение ON.

Для получения дополнительных сведений см. описание инструкций SET ARITHABORT и SET ARITHIGNORE в справочнике Microsoft SQL Server Transact-SQL Reference.


Принудительное занесение результатов транзакций

Если драйвер SQL Server находится в режиме принудительного занесения результатов транзакций, он инициирует транзакцию с помощью инструкции BEGIN TRANSACTION в следующих ситуациях:

·	имеется отложенная инструкция SQL;

·	нет текущей транзакции;

·	нет ограничивающей инструкции языка определения данных (DDL).

Для получения дополнительных сведений об ограничивающих инструкциях языка определения данных см. раздел, посвященный транзакциям, в справочнике Microsoft SQL Server Transact-SQL Reference.

Чтобы занести или свернуть транзакцию в режиме принудительного занесения, в приложении следует вызвать функцию SQLTransact. Драйвер SQL Server посылает инструкцию COMMIT TRANSACTION для занесения результатов транзакции или инструкцию ROLLBACK TRANSACTION для свертывания транзакции.

Ограничивающая инструкция языка определения данных может быть выполнена только в режиме принудительного занесения при одном из следующих условий:

·	после включения режима принудительного занесения и до выполнения неограничивающей инструкции языка определения данных или инструкции языка обработки данных (DML);

·	после занесения или свертывания транзакции и до выполнения неограничивающей инструкции языка определения данных или инструкции языка обработки данных.

Для получения дополнительных сведений о режиме принудительного занесения см. описание функции SQLSetConnectOption в документации Microsoft ODBC SDK Programmer's Reference.

Следующие функции каталога ODBC не могут вызываться внутри транзакции, поскольку они используют каталожные сохраненные процедуры, создающие временные таблицы:

SQLColumnPrivileges
SQLForeignKeys
SQLPrimaryKeys (ограничение только на SQL Server 4.2x)
SQLStatistics
SQLTablePrivileges


Удаленный вызов процедур

Драйвер SQL Server использует для выполнения процедур службу удаленного вызова процедур (RPC) SQL Server вместо передачи процедуры на SQL Server в инструкции SQL. Процедура может иметь вид подготовленной инструкции (инструкции, сохраненной как процедура), процедуры. Вызываемой с помощью синтаксиса ODBC, или сохраненной процедуры, которую драйвер SQL Server использует для реализации функции каталога. Удаленный вызов процедур позволяет получить следующие преимущества по сравнению с передачей процедур в инструкциях SQL:

·	удаленный вызов процедур осуществляется быстрее, чем передача процедур в инструкциях SQL;

·	удаленный вызов процедур позволяет иметь выходные параметры (см. ниже подраздел «Ограничения»); а процедуры, передаваемые в инструкциях SQL, не позволяют. (В обоих случаях процедура может возвращать значение).

Для выполнения инструкции как процедуры с удаленным вызовом необходимо в приложении:

1.	Создать инструкцию SQL.

2.	Вызвать инструкцию SQLBindParameter для каждого аргумента инструкции.

3.	Подготовить инструкцию с помощью SQLPrepare. (Для параметра подключения SQL_USE_PROCEDURE_FOR_PREPARE следует задать значение SQL_UP_ON.)

4.	Выполнить инструкцию с помощью SQLExecute.

Для выполнения процедуры как процедуры с удаленным вызовом необходимо в приложении:

1.	Создать инструкцию SQL, в которой используется синтаксис процедур ODBC. В инструкции должны использоваться маркеры параметров для каждого входного, входного/выходного и выходного параметра, а также для значения, возвращаемого процедурой (если имеется).

2.	Вызвать функцию SQLBindParameter для каждого входного, входного/выходного и выходного параметра, а также для значения, возвращаемого процедурой (если имеется).

3.	Выполнить инструкцию с помощью SQLExecDirect.

Примечание.   Если приложение отправляет процедуру с использованием синтаксиса SQL Server (вместо синтаксиса процедур ODBC), драйвер SQL Server передает процедуру серверу SQL Server в виде инструкции SQL, не использую удаленный вызов процедур.

Ограничения

Удаленные вызовы процедур осуществляются как события языка (EXEC Procname Params), если была выполнена привязка параметров с помощью SQL_DATA_AT_EXEC.

При удаленном вызове процедур в виде событий языка значения выходных параметров не возвращаются.

Выходные параметры сохраненной процедуры являются также входными параметрами, даже если сохраненная процедура не использует входных параметров. Для предотвращения ошибок при преобразовании входные параметры должны иметь допустимые значения.

Для входных/выходных параметров и выходных значения длины/точности (cbColDef) и масштаба (ibScale) заданные с помощью функции SQLBindParameter, ограничивают максимальные выходные значения.


Справочники

Для получения дополнительных сведений о драйвере ODBC SQL Server следует обращаться к следующей документации:

Справочник	Источник
Microsoft ODBC 2.0 Programmer's Reference and SDK Guide	Microsoft Press
ODBC API Reference	SQL Server Books Online
Документация SQL Server	SQL Server Books Online


Словарь терминов

библиотека динамической компоновки (DLL)

Dynamic-link library. Набор подпрограмм, используемых приложениями для совместного выполнения задач. Драйверы ODBC являются библиотеками динамической компоновки.

диспетчер драйверов ODBC

Библиотека динамической компоновки (DLL), под управлением которой осуществляется доступ к драйверам ODBC.

драйвер ODBC

Библиотека динамической компоновки (DLL), которая используется приложениями, поддерживающими ODBC, такими как Microsoft Excel, для доступа к источнику данных. Для каждой из СУБД, например, Microsoft SQL Server, требуется отдельный драйвер.

инструкция SQL

Команда, написанная на языке SQL, называемая также запросом. В инструкциях SQL указываются выполняемые операции, например, SELECT, DELETE или CREATE TABLE, таблицы и столбцы, над которыми выполняются эти операции, а также любые ограничения, налагаемые на операции.

интерфейс программирования приложений (API)

Набор подпрограмм, доступный для разработчиков программного обеспечения при разработке приложения.

источник данных

Источник данных содержит данные и сведения, используемые при доступе к данным. Примерами источников данных могут служить:

·	база данных SQL Server, сервер на котором она расположена и сеть, по которой осуществляется доступ к этому серверу;

·	каталог, содержащий набор файлов dBASE.

набор символов

Специфический набор из 256 букв, цифр и символов для конкретного языка или страны. Конкретные символы в наборе определяются таблицей, которую называют кодовой страницей. Набором символов OEM (Original Equipment Manufacturer) называют любой набор символов, за исключением набора символов ANSI. Microsoft Windows использует набор символов ANSI (с кодовой страницей 1252 для США и 1251 для России).

параметр трансляции

Параметр, определяющий способ трансляции данных транслятором. Например, параметр трансляции может указывать наборы символов, между которыми осуществляется преобразование данных. Параметр трансляции может также задавать ключ для шифрования и дешифрования.

СУБД

Система управления базами данных. Программное обеспечение, обеспечивающее организацию, анализ, поиск, обновление и загрузку данных.

транслятор

Библиотека динамической компоновки (DLL), которая транслирует все данные при их передаче между приложением, например, Microsoft Access, и источником данных. Чаще всего транслятор используется для преобразования символьных данных от одного набор символов к другому. Кроме того, транслятор может выполнять такие задачи как шифрование и дешифрование или сжатие и распаковка.

уровень совместимости

Некоторые приложения могут использовать только те драйверы, которые поддерживают определенные уровни функциональности. Например, для приложения может потребоваться возможность вывода драйвером приглашения указать пароль для доступа к источнику данных. Такая возможность является одним из элементов уровень совместимости для интерфейса программирования приложений (API).

Каждый драйвер ODBC удовлетворяет одному из трех уровней API(основной, уровень 1, уровень 2) и одному из трех грамматических уровней SQL (минимальный, основной, расширенный). Драйверы ODBC могут также поддерживать некоторые функциональные характеристики более высоких уровней.

Подробнее об уровнях совместимости см. в документации Microsoft ODBC SDK Programmer's Reference.

язык обработки данных (DML)

Data manipulation language. Набор инструкций SQL, используемых для обработки данных. Примерами таких инструкций могут служить инструкции UPDATE, INSERT и DELETE.

язык определения данных (DDL)

Data definition language. Набор инструкций SQL, используемых для описания объектов данных и их атрибутов. Примерами таких инструкций могут служить инструкции CREATE TABLE, DROP VIEW и GRANT.

язык SQL

Structured Query Language. Язык, обеспечивающий загрузку, обновление и обработку данных.

ODBC

Open Database Connectivity. Диспетчер драйверов и набор драйверов ODBC, обеспечивающих доступ из приложений к внешним данным с использованием языка SQL.