**************************************************************** MICROSOFT SQL SERVER ДРАЙВЕР ODBC ДЛЯ MICROSOFT SQL SERVER СВЕДЕНИЯ ОБ УСТАНОВКЕ, ВЕРСИЯ 3.7 **************************************************************** Этот файл описывает использование драйвера ODBC версии 3.7 для Microsoft SQL Server с сервером Microsoft SQL Server версии 6.5 или более ранней. Драйвер ODBC версии 3.7 для Microsoft SQL Server распространяется в комплекте сервера SQL Server 7.0; пользователи сервера SQL Server 7.0 будут использовать документацию сервера для получения сведений о драйвере вместо этого файла Readme. Содержание: 1. Обзор 2. Установка файла Instcat.sql на сервере 3. Получение клиентских сетевых библиотек для сервера SQL Server 4. Документация по использованию ODBC с SQL Server 5. Использование драйвера в среде разработки 6. Совместимость **************************************************************** 1. Обзор Драйвер ODBC версии 3.7 для SQL Server - это драйвер Win32ODBC версии 3.51. Он может использоваться с приложениями, написанными для интерфейса API более ранних версий: ODBC 2.X или ODBC 3.X. Драйвер работает с серверами SQL Server версии 4.21а и более поздними. Драйвер работает под управлением операционных систем Windows 98, Windows 95 или Windows NT (версии 4.0 или более поздней). Вместе с драйвером ODBC версии 3.7 для SQL Server также устанавливается вспомогательная программа сетевого клиента для сервера SQL Server 7.0 (для Win32). Эта программа может использоваться с сервером SQL Server версии 4.21а или более поздним, а также с клиентскими сетевыми библиотеками, которые поставляются вместе с используемой версией сервера SQL Server. **************************************************************** 2. Установка файла Instcat.sql на сервере Для получения сведений из системного каталога сервера SQL Server драйвером ODBC используется набор системных хранимых процедур, называемых хранимыми процедурами каталога. Каждая версия драйвера ODBC для SQL Server рассчитана на определенные версии хранимых процедур каталога. Файл Instcat.sql, поставляемый вместе с драйвером ODBC версии 3.7 для SQL Server, содержит небольшие изменения для хранимых процедур каталога, которые обновляют процедуры для использования их драйвером этой версии. Файл Instcat.sql, распространяемый вместе с драйвером ODBC версии 3.7 для SQL Server, такой же, как и файл Instcat.sql, распространяемый с сервером SQL Server 7.0. Для этой версии сервера запуска файла Instcat.sql не требуется. Для гарантирования правильной работы драйвера системный администратор сервера SQL Server должен использовать сценарий Instcat.sql для обновления хранимых процедур каталога. Обновление хранимых процедур каталога не влияет на работу старых клиентов сервера SQL Server. Это может быть сделано для всех версий сервера SQL Server, начиная с 4.21a и до 6.5. Обновление не нужно для сервера SQL Server 7.0. Чтобы обновить хранимые процедуры каталога для сервера SQL Server 4.21а, 6.0 или 6.5, системный администратор должен запустить сценарий Instcat.sql с помощью служебной программы isql (см. дальнейшие инструкции). Перед внесением любых изменений в основную базу данных, системный администратор должен создать резервную копию базы. Запуск isql должен производиться с компьютера, который установлен как клиентская рабочая станция для сервера SQL Server. Запуск сценария Instcat.sql посредством служебной программы isql из командной строки: C:>ISQL /Uса /Pпароль_са /Sимя_сервера /iпуть\Instcat.Sql где са Имя системного администратора. пароль_са Пароль системного администратора. имя_сервера Имя сервера, на котором установлен сервер SQL Server. путь Полный путь к файлу Instcat.Sql. В ходе работы сценария Instcat.sql выводятся сообщения, в основном, информирующие о количестве записей, на которые распространились инструкции Transact-SQL. Практически все сообщения принимать во внимание не требуется, однако следует отслеживать возможное появление ошибки. Если сценарий Instcat.sql выполняется на сервере SQL Server версии 6.0, сообщение о несуществующем объекте sp_MS_upd_sysobj_category можно пропустить. Последнее сообщение должно указывать на успешное завершение сценария Instcat.sql. Выполнение сценария Instcat.sql прекращается, если в главной базе данных недостаточно места для записи хранимых процедур каталога или для ведения журнала изменений существующих процедур. **************************************************************** 3. Получение клиентских сетевых библиотек сервера SQL Server Драйвер ODBC для SQL Server использует клиентские сетевые библиотеки для поддержки связи с сервером. Драйвер ODBC версии 3.7 для SQL Server также использует служебную программу для настройки клиента сервера SQL Server для управления связями сетевых библиотек с источником данных ODBC. Драйвер ODBC версии 3.7 для SQL Server устанавливает только одну сетевую библиотеку: сетевую библиотеку именованных потоков для Win32 Dbnmpntw.dll. Можно использовать драйвер ODBC версии 3.7 для SQL Server со старыми сетевыми библиотеками Win32. Если для подключения к серверу SQL Server требуется другая сетевая библиотека именованных потоков, можно использовать сетевую библиотеку, входящую в комплект используемой вами версии сервера SQL Server. Сетевые библиотеки сервера SQL Server можно получить установкой служебных клиентских программ SQL Server (Win32) для используемой версии сервера SQL Server. Версия служебной программы сетевого клиента SQL Server, установленная с драйвером ODBC версии 3.7 для SQL Server, может использоваться с клиентскими сетевыми библиотеками сервера SQL Server 4.21a или более поздней версии. **************************************************************** 4. Документация по использованию ODBC с SQL Server Драйвер ODBC версии 3.7 для SQL Server такой же, как и распространяемый в составе сервера SQL Server 7.0. Пользователи сервера SQL Server 7.0 могут пользоваться документацией на сервер для получения сведений о драйвере ODBC версии 3.7 для SQL Server. Когда драйвер ODBC версии 3.7 для SQL Server используется с сервером SQL Server версий 4.21а, 6.0 или 6.5, он работает таким же образом, как и старые драйверы. Сведения, об особенностях работы драйвера, поставляемого с конкретной версией сервера SQL Server, можно найти в следующих источниках. * Файл drvssrvr.hlp, входящий в комплект поставки ранних версий сервера SQL Server. * Раздел руководства к серверу SQL Server 6.5 "Programming ODBC for Microsoft SQL Server". * Документ "Using ODBC with Microsoft SQL Server" из категории "белые страницы", доступный в MSDN. Сведения о драйвере ODBC версии 3.7 для Microsoft SQL Server можно также найти в техническом замечании "Using ODBC with Microsoft SQL Server", которое доступно в MSDN. Во входящем в комплект драйвера версии 3.7 файле Sqlsodbc.hlp содержится только контекстно-зависимая справка для мастера SQL Server ODBC Data Source. В комплект предыдущих версий драйвера входил файл Drvssrvr.hlp, содержавший сведения о возможностях, характерных для драйвера. Сведения, содержавшиеся в файле Drvssrvr.hlp предшествующих версий, приведены в руководстве к SQL Server 6.5 "Programming ODBC for Microsoft SQL Server." **************************************************************** 5. Использование драйвера в среде разработки Для некоторых вызовов функций ODBC драйвер ODBC для SQL Server использует параметры, зависящие от драйвера. Директивы #define для этих параметров и описания структур, зависящих от драйвера, для языков C/C++ содержатся в файле Odbcss.h. Файл Odbcss.h для драйвера ODBC версии 3.7 для SQL Server входит в комплекты следующего программного обеспечения. * Сервер SQL Server 7.0. * Пакет обновления версии 2 или более поздней для сервера SQL Server 6.5. * Пакет MDAC SDK. Пакет MDAC SDK является частью профессиональной редакции Microsoft Developer Network. Пакет SDK может быть также загружен с узла Web корпорации Microsoft по адресу www.microsoft.com/data. Пакет SDK также можно получить в издательстве "Microsoft Press" в составе "Microsoft ODBC 3.0 Software Development Kit and Programmer's Reference". **************************************************************** 6. Совместимость После того, как драйвер версии 3.7 стал входить в комплект поставки сервера SQL Server 7.0, пользователям сервера следует обращаться за документацией по ODBC к документации сервера SQL Server 7.0. Вопросы совместимости документированы в этом разделе только для случая использования драйвера с серверами более ранних версий (4.21а, 6.0, 6.5). При добавлении или изменении в программе ODBC Administrator источников данных или при вызове приложением функции SQLConfigDataSource с последующим запросом сведений у пользователя, драйвером ODBC версии 3.7 для SQL Server выводится мастер. Для просмотра документации мастера щелкните кнопку Help. В драйвере ODBC версии 2.65 для SQL Server, поставляемом в одном комплекте с сервером SQL Server 6.5, значение SQL_COPT_SS_PERF_QUERY_INTERVAL выражалось в секундах, а не в миллисекундах, как это было описано в документации (см. статью Q157753 в базе Knowledge Base). В драйвере ODBC версии 3.7 для SQL Server значение SQL_COPT_SS_PERF_QUERY_INTERVAL выражается в миллисекундах в соответствии с документацией. Следующие изменения отражаются только на тех приложениях, которые были написаны с использованием интерфейса ODBC 3.X API. Они не относятся к приложениям, написанным с использованием интерфейса ODBC 2.X API. В большинстве приложений ODBC изменения не влияют на обработку результирующего набора. В предыдущих версиях драйвера ODBC для SQL Server последовательное выполнение инструкций PRINT или RAISERROR при пакетной обработке или в хранимой процедуре приводило к смешиванию сообщений в одном результирующем наборе. В драйвере версии 3.7 сообщения для каждого SQL-выражения возвращаются в отдельных результирующих наборах. Следует вызывать функцию SQLMoreResults для каждого сообщения, чтобы перейти к сообщению для следующего SQL-выражения. Сообщения от одного SQL-выражения, такого как DBCC, возвращаются в одном результирующем наборе, поэтому вызывать функцию SQLMoreResults для каждого сообщения не требуется. В предыдущих версиях драйвера ODBC для SQL Server, ошибка времени исполнения или ошибка RAISERROR уровня 11 или выше, возникавшая при выполнении первой инструкции пакета или хранимой процедуры, всегда являлась причиной возврата кода ошибки SQL_ERROR функциями SQLExecute, SQLExecDirect или SQLParamData. В версии 3.7 драйвера ODBC для SQL Server функции SQLExecute, SQLExecDirect и SQLParamData возвращают значение SQL_ERROR только в случае, если после первой инструкции ни одной другой не выполнялось. Если какие-нибудь инструкции выполнялись после первой, даже инструкция RETURN без возвращаемого значения, функции SQLExecute и SQLExecDirect вернут значение SQL_SUCCESS_WITH_INFO. После обработки сообщения SQL_SUCCESS_WITH_INFO с помощью SQLGetDiagRec, следует вызвать функцию SQLMoreResults для перехода к следующему результирующему набору. При обнаружении предыдущими версиями драйвера ошибки в первой инструкции пакета или хранимой процедуры после возвращения значения SQL_ERROR функцией SQLExecute или SQLExecDirect можно было использовать дескриптор в другом SQL-выражении. Когда драйвером версии 3.7 возвращается значение SQL_SUCCESS_WITH_INFO, выполнение следующего SQL-выражения не осуществляется до тех пор, пока функция SQLMoreResults не вернет значение SQL_NO_DATA или пока все результирующие наборы, созданные после ошибки RAISERROR, не будут закрыты. Если после ошибки не было создано ни одного результирующего набора, вызов функции SQLCloseCursor будет невозможен; для освобождения дескриптора инструкции и перехода к выполнению другого SQL-выражения необходимо вызвать функцию SQLFreeStmt(SQL_CLOSE) или SQLMoreResults: CREATE PROCEDURE TestPrc @Parm1 as IF (@Parm1 IS NULL) BEGIN RAISERROR ('Parm1 cannot be NULL', 11, 1) RETURN END SELECT * FROM sysusers WHERE suid = @Parm1 GO Затем выполнить: SQLExecDirect(hstmt, "{ call TestPrc (NULL) }", SQL_NTS); При использовании старой версии драйвера ODBC для SQL Server, или если приложение реализовано на основе интерфейса ODBC 2.X API, функцией SQLExecDirect будет возвращено значение SQL_ERROR. После того, как функцией SQLGetDiagRec будет возвращено значение SQL_NO_DATA или функцией SQLError значение SQL_NO_DATA_FOUND, дескриптор инструкции освободится для выполнения следующей команды SQL. В случае если драйвер ODBC версии 3.7 для SQL Server используется в приложении, реализованном на основе ODBC 3.X API, функцией SQLExecDirect возвращается значение SQL_SUCCESS_WITH_INFO. После того, как функцией SQLGetDiagRec будет возвращено значение SQL_NO_DATA, дескриптор команды будет недоступен для выполнения следующего SQL-выражения до тех пор, пока функция SQLMoreResults не вернет значение SQL_NO_DATA, или пока не будет вызвана функция SQLFreeStmt(SQL_CLOSE). В предыдущих версиях драйвера ODBC для SQL Server функции SQLExecute, SQLExecDirect и SQLParamData возвращали значение SQL_SUCCESS, когда в приложении выполнялась команда UPDATE или DELETE, не влиявшая ни на одну строку. По этой причине драйвер версии 3.7 также возвращает значение SQL_SUCCESS в приложениях, реализованных на основе ODBC 2.X API, однако для приложений ODBC 3.X возвращается значение SQL_NO_DATA. Если потом в приложении будет вызвана функция SQLRowCount, то возвращенным значением будет ноль. В ODBC 3.X способ получения результатов определен более четко, нежели в ODBC 2.X. В ранних версиях драйвера ODBC для SQL Server драйвер возвращал значения выходных параметров и код возврата, в то время как функции ODBC 2.X SQLFetch или SQLExtendedFetch возвращали SQL_NO_DATA в последнем результирующем наборе, возвращаемом хранимой процедурой. Драйвер ODBC версии 3.7 для SQL Server поддерживает этот режим работы, когда вызывается приложениями, использующими ODBC 2.X. Когда драйвер версии 3.7 вызывается приложениями, использующими ODBC 3.X, драйвер не возвращает выходных параметров или кодов возврата до тех пор, пока SQLMoreResults не вернет значение SQL_NO_DATA. ****************************************************************