SQLSetConnectAttr

В драйвере ODBC для собственного клиента SQL Server настройка SQL_ATTR_CONNECTION_TIMEOUT не учитывается.

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

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

SQL Server 2005 обеспечил поддержку нового атрибута изоляции транзакций, SQL_COPT_SS_TXN_ISOLATION. Задание SQL_COPT_SS_TXN_ISOLATION значения SQL_TXN_SS_SNAPSHOT указывает, что транзакция произойдет на уровне изоляции моментального снимка.

ПримечаниеПримечание

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

Повышение атрибутов инструкций ODBC до атрибутов соединения может привести к непредсказуемым результатам. Атрибуты инструкций, запрашивающие серверные курсоры для обработки результирующего набора, можно повысить до атрибутов соединения. Например, присвоение атрибуту инструкции ODBC SQL_ATTR_CONCURRENCY значения (более ограничивающего, чем SQL_CONCUR_READ_ONLY), принятое по умолчанию, указывает драйверу, что для всех инструкций соединения следует использовать динамические курсоры. Выполнение функции каталога ODBC в инструкции соединения возвращает SQL_SUCCESS_WITH_INFO и диагностическую запись, указывающую, что режим работы курсора изменился на «только чтение». Попытка выполнить инструкцию Transact-SQL SELECT, содержащую предложение COMPUTE, в том же соединении завершится ошибкой.

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

Атрибут SQL Server

Устанавливается перед или после соединения с сервером

SQL_COPT_SS_ANSI_NPW

Перед

SQL_COPT_SS_ATTACHDBFILENAME

Перед

SQL_COPT_SS_BCP

Перед

SQL_COPT_SS_BROWSE_CONNECT

Перед

SQL_COPT_SS_BROWSE_SERVER

Перед

SQL_COPT_SS_CONCAT_NULL

Перед

SQL_COPT_SS_CONNECTION_DEAD

После

SQL_COPT_SS_ENCRYPT

Перед

SQL_COPT_SS_ENLIST_IN_DTC

После

SQL_COPT_SS_ENLIST_IN_XA

После

SQL_COPT_SS_FALLBACK_CONNECT

Перед

SQL_COPT_SS_FAILOVER_PARTNER

Перед

SQL_COPT_SS_INTEGRATED_SECURITY

Перед

SQL_COPT_SS_MARS_ENABLED

Перед

SQL_COPT_SS_OLDPWD

Перед

SQL_COPT_SS_PERF_DATA

После

SQL_COPT_SS_PERF_DATA_LOG

После

SQL_COPT_SS_PERF_DATA_LOG_NOW

После

SQL_COPT_SS_PERF_QUERY

После

SQL_COPT_SS_PERF_QUERY_INTERVAL

После

SQL_COPT_SS_PERF_QUERY_LOG

После

SQL_COPT_SS_PRESERVE_CURSORS

Перед

SQL_COPT_SS_QUOTED_IDENT

Допустим любой вариант

SQL_COPT_SS_TRANSLATE

Допустим любой вариант

SQL_COPT_SS_TRUST_SERVER_CERTIFICATE

Перед

SQL_COPT_SS_TXN_ISOLATION

Допустим любой вариант

SQL_COPT_SS_USE_PROC_FOR_PREP

Допустим любой вариант

SQL_COPT_SS_USER_DATA

Допустим любой вариант

SQL_COPT_SS_WARN_ON_CP_ERROR

Перед

SQL_COPT_SS_ANSI_NPW

SQL_COPT_SS_ANSI_NPW включает или отключает использование обработки значения NULL по стандарту ISO в сравнениях, объединениях строк, заполнениях символьных типов данных и предупреждениях. Дополнительные сведения см. в описаниях команд SET ANSI_NULLS, SET ANSI_PADDING, SET ANSI_WARNINGS и SET CONCAT_NULL_YIELDS_NULL.

Значение

Описание

SQL_AD_ON

По умолчанию. Соединение использует настройки по умолчанию ANSI для обработки сравнений NULL, дополнений, предупреждений и объединений NULL.

SQL_AD_OFF

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

Если используется пул соединений, SQL_COPT_SS_ANSI_NPW следует устанавливать в строке соединения, а не в SQLSetConnectAttr. После установки соединения любая попытка изменить этот атрибут при использовании пула соединений завершится ошибкой без сообщений.

SQL_COPT_SS_ATTACHDBFILENAME

SQL_COPT_SS_ATTACHDBFILENAME указывает имя первичного файла для присоединяемой базы данных. Эта база данных присоединяется и становится для соединения базой данных по умолчанию. Для использования SQL_COPT_SS_ATTACHDBFILENAME необходимо задать имя базы данных в качестве значения атрибута соединения SQL_ATTR_CURRENT_CATALOG or in the DATABASE = параметр SQLDriverConnect. Если база данных уже присоединена, SQL Server не будет повторно присоединять ее.

Значение

Описание

Указатель SQLPOINTER на символьную строку

Эта строка содержит имя первичного файла для присоединяемой базы данных. Включите полное имя файла.

SQL_COPT_SS_BCP

SQL_COPT_SS_BCP включает функции массового копирования в соединение. Дополнительные сведения см. в разделе Функции массового копирования;

Значение

Описание

SQL_BCP_OFF

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

SQL_BCP_ON

Функции массового копирования доступны в соединении.

SQL_COPT_SS_BROWSE_CONNECT

Этот атрибут используется для настройки результирующего набора, возвращаемого функцией SQLBrowseConnect. SQL_COPT_SS_BROWSE_CONNECT включает или отключает возвращение дополнительных сведений из перечисляемого экземпляра SQL Server. Они могут включать такие сведения, как является ли сервер кластером, имена различных экземпляров и номер версии.

Значение

Описание

SQL_MORE_INFO_NO

По умолчанию. Возвращает список серверов.

SQL_MORE_INFO_YES

В SQL Server 7.0 SQLBrowseConnect возвращает список серверов, в остальных случаях SQLBrowseConnect возвращает расширенную строку свойств сервера.

SQL_COPT_SS_BROWSE_SERVER

Этот атрибут используется для настройки результирующего набора, возвращаемого функцией SQLBrowseConnect. SQL_COPT_SS_BROWSE_SERVER задает имя сервера, для которого SQLBrowseConnect возвращает данные.

Значение

Описание

computername

SQLBrowseConnect возвращает список экземпляров SQL Server на заданный компьютер. Двойную обратную косую черту (\\) не следует использовать для имени сервера (например, вместо «\\MyServer» необходимо использовать «MyServer»).

NULL

По умолчанию. SQLBrowseConnect возвращает данные для всех серверов в домене.

SQL_COPT_SS_CONCAT_NULL

SQL_COPT_SS_CONCAT_NULL включает или выключает обработку значений NULL согласно стандарту ISO при объединении строк. Дополнительные сведения см. в описании команды SET CONCAT_NULL_YIELDS_NULL.

Значение

Описание

SQL_CN_ON

По умолчанию. Соединение использует поведение ISO по умолчанию для обработки значений NULL при объединении строк.

SQL_CN_OFF

Соединение использует поведение, определенное в SQL Server, для обработки значений NULL при объединении строк.

SQL_COPT_SS_ENCRYPT

Управляет шифрованием соединения.

Шифрование использует сертификат, находящийся на сервере. Он должен быть заверен центром сертификации, если атрибут соединения SQL_COPT_SS_TRUST_SERVER_CERTIFICATE не имеет значение SQL_TRUST_SERVER_CERTIFICATE_YES или строка соединения не содержит «TrustServerCertificate=yes». Если соблюдается одно из этих условий, то при отсутствии сертификата на сервере для шифрования соединения может использоваться сертификат, созданный и подписанный сервером.

Значение

Описание

SQL_EN_ON

Соединение будет зашифрованным.

SQL_EN_OFF

Соединение не будет зашифрованным. Это режим по умолчанию.

SQL_COPT_SS_ENLIST_IN_DTC

Клиент вызывает метод координатора распределенных транзакций (Майкрософт) (MS DTC) OLE DB ITransactionDispenser::BeginTransaction для запуска транзакции MS DTC и создания объекта транзакции MS DTC, представляющего эту транзакцию. Затем приложение вызывает SQLSetConnectAttr с параметром SQL_COPT_SS_ENLIST_IN_DTC, чтобы связать объект транзакции с соединением ODBC. Все связанные действия базы данных будут выполняться под защитой транзакции MS DTC. Приложение вызывает SQLSetConnectAttr с параметром SQL_DTC_DONE, чтобы завершить связь соединения с координатором распределенных транзакций. Дополнительные сведения см. в разделе Распределенные транзакции MS DTC.

Значение

Описание

Объект DTC*

Объект транзакции MS DTC OLE, который задает экспорт транзакции в SQL Server.

SQL_DTC_DONE

Отделяет конец транзакции DTC.

SQL_COPT_SS_ENLIST_IN_XA

Чтобы начать XA-транзакцию с XA-совместимым обработчиком транзакций (TP), клиент вызывает функцию Open Group tx_begin. Затем приложение вызывает SQLSetConnectAttr со значением параметра SQL_COPT_SS_ENLIST_IN_XA, равным TRUE, чтобы связать XA-транзакцию с соединением ODBC. Все связанные действия базы данных будут выполняться под защитой XA-транзакции. Для завершения связи XA с соединением ODBC клиент должен вызвать SQLSetConnectAttr со значением параметра SQL_COPT_SS_ENLIST_IN_XA, равным FALSE. Дополнительные сведения см. в документации по координатору распределенных транзакций (Майкрософт).

SQL_COPT_SS_FALLBACK_CONNECT

Этот атрибут больше не поддерживается, поскольку собственный клиент SQL Server не поддерживает соединение с SQL Server 6.5.

SQL_COPT_SS_FAILOVER_PARTNER

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

После установки соединения приложение может запросить этот атрибут с помощью SQLGetConnectAttr для определения участника отработки отказа. Если сервер-источник не имеет участника отработки отказа, то это свойство вернет пустую строку. Это позволяет приложению кэшировать последний определенный резервный сервер, но при этом необходимо учитывать, что данные обновляются только при первоначальной установке соединения или его восстановлении (при наличии пула), поэтому они могут устареть, если соединение поддерживается длительное время.

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

SQL_COPT_SS_INTEGRATED_SECURITY

SQL_COPT_SS_INTEGRATED_SECURITY задает принудительное использование проверки подлинности Windows для проверки доступа по имени входа сервера. Если используется проверка подлинности Windows, драйвер пропускает значения идентификатора пользователя и пароля, предоставленные в процессе обработки SQLConnect, SQLDriverConnect или SQLBrowseConnect.

Значение

Описание

SQL_IS_OFF

По умолчанию. Для проверки идентификатора и пароля для имени входа используется проверка подлинности SQL Server.

SQL_IS_ON

Для проверки прав доступа пользователя к SQL Server используется проверка подлинности Windows.

SQL_COPT_SS_MARS_ENABLED

Этот атрибут включает или отключает режим MARS. По умолчанию режим MARS отключен. Атрибут должен быть установлен до соединения с SQL Server. После открытия соединения с SQL Server режим MARS останется включенным или отключенным до закрытия соединения.

Значение

Описание

SQL_MARS_ENABLED_NO

По умолчанию. Режим MARS отключен.

SQL_MARS_ENABLED_YES

Режим MARS включен.

Дополнительные сведения о режиме MARS см. в разделе Использование режима MARS.

SQL_COPT_SS_OLDPWD

Истечение срока действия пароля для проверки подлинности SQL Server было введено в SQL Server 2005. Добавлен атрибут SQL_COPT_SS_OLDPWD, чтобы клиент мог предоставлять как старый, так и новый пароль для соединения. Если для этого свойства установлено значение, поставщик не будет использовать пул соединений для первого и последующих соединений, поскольку строка соединения будет содержать «старый пароль», который уже изменен.

Дополнительные сведения см. в разделе Смена пароля программным способом.

Значение

Описание

SQL_COPT_SS_OLD_PASSWORD

Указатель SQLPOINTER на символьную строку, содержащую старый пароль. Это значение предназначено только для записи и должно устанавливаться перед соединением с сервером.

SQL_COPT_SS_PERF_DATA

SQL_COPT_SS_PERF_DATA начинает или останавливает запись данных в журнал. Имя файла журнала данных необходимо установить до начала записи в журнал. См. SQL_COPT_SS_PERF_DATA_LOG ниже.

Значение

Описание

SQL_PERF_START

Начинает выборку сведений о производительности.

SQL_PERF_STOP

Останавливает счетчики производительности.

Дополнительные сведения см. в разделе SQLGetConnectAttr.

SQL_COPT_SS_PERF_DATA_LOG

SQL_COPT_SS_PERF_DATA_LOG присваивает имя файлу журнала, который используется для регистрации сведений о производительности. Имя файла журнала является строкой, завершаемой нулевым байтом в кодировке ANSI или Юникод, в зависимости от компиляции приложения. Аргумент StringLength должен иметь значение SQL_NTS.

SQL_COPT_SS_PERF_DATA_LOG_NOW

SQL_COPT_SS_PERF_DATA_LOG_NOW дает указание драйверу записать на диск запись журнала статистики. Аргумент StringLength должен иметь значение SQL_NTS.

SQL_COPT_SS_PERF_QUERY

SQL_COPT_SS_PERF_QUERY начинает или останавливает ведение журнала для длительных запросов. Имя файла журнала запроса необходимо задать до начала записи в журнал. Приложение может определить «долгое выполнение», установив интервал ведения журнала.

Значение

Описание

SQL_PERF_START

Начинает ведение журнала для длительных запросов.

SQL_PERF_STOP

Останавливает ведение журнала для длительных запросов.

Дополнительные сведения см. в разделе SQLGetConnectAttr.

SQL_COPT_SS_PERF_QUERY_INTERVAL

SQL_COPT_SS_PERF_QUERY_INTERVAL устанавливает пороговое значение ведения журнала запроса в миллисекундах. Запросы, превышающие это значение, регистрируются в журнале долго выполняющихся запросов. Верхний предел порогового значения отсутствует. Пороговое значение запроса, равное нулю, приводит к ведению журнала для всех запросов.

SQL_COPT_SS_PERF_QUERY_LOG

SQL_COPT_SS_PERF_QUERY_LOG присваивает имя файлу журнала для записи данных долго выполняющихся запросов. Имя файла журнала представляет собой строку, оканчивающуюся нулевым байтом в кодировке ANSI или в Юникоде, в зависимости от параметров компиляции приложения. Аргумент StringLength должен быть SQL_NTS или длиной строки в байтах.

SQL_COPT_SS_PRESERVE_CURSORS

Этот атрибут позволяет запрашивать и устанавливать независимо от того, сохраняет ли соединение курсоры при фиксации или откате транзакции. Значение имеет вид SQL_PC_ON или SQL_PC_OFF. По умолчанию имеет значение SQL_PC_OFF. Определяет, закроет ли драйвер курсоры при вызове SQLEndTran (или SQLTransact).

Значение

Описание

SQL_PC_OFF

По умолчанию. Курсоры закрываются при фиксации или откате транзакции, используя SQLEndTran.

SQL_PC_ON

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

SQL_COPT_SS_QUOTED_IDENT

SQL_COPT_SS_QUOTED_IDENT позволяет использовать в соединении заключенные в кавычки идентификаторы инструкций ODBC и Transact-SQL. Предоставляя заключенные в кавычки идентификаторы, драйвер ODBC для собственного клиента SQL Server дает возможность использовать имена объектов, содержащих пробел в идентификаторе, например «My Table». Дополнительные сведения см. в разделе SET QUOTED_IDENTIFIER.

Значение

Описание

SQL_QI_OFF

Соединение SQL Server не допускает идентификаторы в кавычках в инструкциях Transact-SQL.

SQL_QI_ON

По умолчанию. Соединение допускает идентификаторы в кавычках в инструкциях Transact-SQL.

SQL_COPT_SS_TRANSLATE

SQL_COPT_SS_TRANSLATE заставляет драйвер преобразовывать символы между кодовыми страницами клиента и сервера при обмене данными MBCS. Атрибут влияет только на данные, хранящиеся в столбцах SQL Serverchar, varchar и text.

Значение

Описание

SQL_XL_OFF

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

SQL_XL_ON

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

SQL_COPT_SS_TRUST_SERVER_CERTIFICATE

SQL_COPT_SS_TRUST_SERVER_CERTIFICATE заставляет драйвер включать или отключать проверку сертификата при использовании шифрования. Атрибут является значением, предназначенным для чтения и записи, но его установка после открытия соединения не имеет действия.

Клиентские приложения могут запрашивать это свойство после открытия соединения для получения используемых параметров шифрования и проверки.

Значение

Описание

SQL_TRUST_SERVER_CERTIFICATE_NO

По умолчанию. Шифрование без проверки сертификата не включено.

SQL_TRUST_SERVER_CERTIFICATE_YES

Шифрование без проверки сертификата включено.

SQL_COPT_SS_TXN_ISOLATION

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

Значение

Описание

SQL_TXN_SS_SNAPSHOT

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

Дополнительные сведения об изоляции моментальных снимков см. в разделе Работа с изоляцией моментального снимка.

SQL_COPT_SS_USE_PROC_FOR_PREP

Этот атрибут больше не поддерживается, поскольку собственный клиент SQL Server не поддерживает соединение с SQL Server 6.5.

SQL_COPT_SS_USER_DATA

SQL_COPT_SS_USER_DATA устанавливает указатель на пользовательские данные. Пользовательские данные — данные соединения, хранящиеся в памяти клиента.

Дополнительные сведения см. в разделе SQLGetConnectAttr.

SQL_COPT_SS_WARN_ON_CP_ERROR

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

Значение

Описание

SQL_WARN_YES

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

SQL_WARN_NO

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

Поддержка функции SQLSetConnectAttr применительно к именам участников-служб (SPN)

SQLSetConnectAttr может использоваться для присвоения значения новым атрибутам соединения, SQL_COPT_SS_SERVER_SPN и SQL_COPT_SS_FAILOVER_PARTNER_SPN. Эти атрибуты нельзя устанавливать при открытом соединении, в противном случае возвращается ошибка HY011 с сообщением «В настоящее время эта операция недопустима». Для присвоения этих значений можно также использовать функцию SQLSetConnectOption.

Дополнительные сведения об именах участников-служб см. в разделе Имена участников-служб в клиентских запросах на установление соединения (ODBC).

SQL_COPT_SS_CONNECTION_DEAD

Этот атрибут доступен только для чтения.

Дополнительные сведения об атрибуте SQL_COPT_SS_CONNECTION_DEAD см. в разделах SQLGetConnectAttr и Соединение с источником данных (ODBC).

Примеры

В этом примере данные производительности записываются в журнал.

SQLPERF*     pSQLPERF;
SQLINTEGER   nValue;

// See if you are already logging. SQLPERF* will be NULL if not.
SQLGetConnectAttr(hDbc, SQL_COPT_SS_PERF_DATA, &pSQLPERF,
    sizeof(SQLPERF*), &nValue);

if (pSQLPERF == NULL)
    {
    // Set the performance log file name.
    SQLSetConnectAttr(hDbc, SQL_COPT_SS_PERF_DATA_LOG,
        (SQLPOINTER) "\\My LogDirectory\\MyServerLog.txt", SQL_NTS);

    // Start logging...
    SQLSetConnectAttr(hDbc, SQL_COPT_SS_PERF_DATA,
        (SQLPOINTER) SQL_PERF_START, SQL_IS_INTEGER);
    }
else
    {
    // Take a snapshot now so that your performance statistics are discernible.
    SQLSetConnectAttr(hDbc, SQL_COPT_SS_PERF_DATA_LOG_NOW, NULL, 0);
    }

    // ...perform some action...

// ...take a performance data snapshot...
SQLSetConnectAttr(hDbc, SQL_COPT_SS_PERF_DATA_LOG_NOW, NULL, 0);

    // ...perform more actions...

// ...take another snapshot...
SQLSetConnectAttr(hDbc, SQL_COPT_SS_PERF_DATA_LOG_NOW, NULL, 0);

// ...and disable logging.
SQLSetConnectAttr(hDbc, SQL_COPT_SS_PERF_DATA,
    (SQLPOINTER) SQL_PERF_STOP, SQL_IS_INTEGER);

// Continue on...