Compartilhar via


SQLSetConnectAttr

O driver ODBC do SQL Server Native Client ignora a configuração de SQL_ATTR_CONNECTION_TIMEOUT.

SQL_ATTR_TRANSLATE_LIB também é ignorado; a especificação de outra biblioteca de conversão não é permitida. Para permitir que os aplicativos sejam aprovados com facilidade para usar um driver Microsoft ODBC para SQL Server, qualquer valor definido com SQL_ATTR_TRANSLATE_LIB será copiado dentro e fora de um buffer no Gerenciador de Driver.

O driver ODBC do SQL Server Native Client implementa isolamento de transação de leitura repetida como serializável.

O SQL Server 2005 introduziu o suporte a um novo atributo de isolamento de transação, SQL_COPT_SS_TXN_ISOLATION. Configurar SQL_COPT_SS_TXN_ISOLATION como SQL_TXN_SS_SNAPSHOT indica que a transação ocorrerá no nível de isolamento do instantâneo.

ObservaçãoObservação

SQL_ATTR_TXN_ISOLATION pode ser usado para definir todos os outros níveis de isolamento, com exceção de SQL_TXN_SS_SNAPSHOT. Se quiser usar isolamento do instantâneo, deverá definir SQL_TXN_SS_SNAPSHOT através de SQL_COPT_SS_TXN_ISOLATION. Porém, você pode recuperar o nível de isolamento usando SQL_ATTR_TXN_ISOLATION ou SQL_COPT_SS_TXN_ISOLATION.

A promoção de atributos de instrução ODBC a atributos de conexão pode ter consequências não intencionais. Os atributos de instrução que solicitam cursores de servidor para processamento de conjuntos de resultados podem ser promovidos a conexões. Por exemplo, configurar o atributo de instrução ODBC SQL_ATTR_CONCURRENCY para um valor mais restritivo que o padrão SQL_CONCUR_READ_ONLY orienta o servidor a usar cursores dinâmicos para todas as instruções enviadas na conexão. Executar uma função de catálogo ODBC em uma instrução na conexão retorna SQL_SUCCESS_WITH_INFO e um registro de diagnóstico que indica que o comportamento do cursor foi alterado para somente leitura. A tentativa de executar uma instrução SELECT do Transact-SQL contendo uma cláusula COMPUTE na mesma conexão causa uma falha.

O driver ODBC do SQL Server Native Client dá suporte a várias extensões específicas para atributos da conexão ODBC definidos em sqlncli.h. O driver ODBC do SQL Server Native Client poderá exigir que o atributo seja definido antes da conexão, ou poderá ignorar o atributo se ele já tiver sido definido. A seguinte tabela apresenta as restrições.

Atributo do SQL Server

Defina antes ou depois da conexão com o servidor

SQL_COPT_SS_ANSI_NPW

Antes

SQL_COPT_SS_ATTACHDBFILENAME

Antes

SQL_COPT_SS_BCP

Antes

SQL_COPT_SS_BROWSE_CONNECT

Antes

SQL_COPT_SS_BROWSE_SERVER

Antes

SQL_COPT_SS_CONCAT_NULL

Antes

SQL_COPT_SS_CONNECTION_DEAD

Depois

SQL_COPT_SS_ENCRYPT

Antes

SQL_COPT_SS_ENLIST_IN_DTC

Depois

SQL_COPT_SS_ENLIST_IN_XA

Depois

SQL_COPT_SS_FALLBACK_CONNECT

Antes

SQL_COPT_SS_FAILOVER_PARTNER

Antes

SQL_COPT_SS_INTEGRATED_SECURITY

Antes

SQL_COPT_SS_MARS_ENABLED

Antes

SQL_COPT_SS_OLDPWD

Antes

SQL_COPT_SS_PERF_DATA

Depois

SQL_COPT_SS_PERF_DATA_LOG

Depois

SQL_COPT_SS_PERF_DATA_LOG_NOW

Depois

SQL_COPT_SS_PERF_QUERY

Depois

SQL_COPT_SS_PERF_QUERY_INTERVAL

Depois

SQL_COPT_SS_PERF_QUERY_LOG

Depois

SQL_COPT_SS_PRESERVE_CURSORS

Antes

SQL_COPT_SS_QUOTED_IDENT

Qualquer

SQL_COPT_SS_TRANSLATE

Qualquer

SQL_COPT_SS_TRUST_SERVER_CERTIFICATE

Antes

SQL_COPT_SS_TXN_ISOLATION

Qualquer

SQL_COPT_SS_USE_PROC_FOR_PREP

Qualquer

SQL_COPT_SS_USER_DATA

Qualquer

SQL_COPT_SS_WARN_ON_CP_ERROR

Antes

SQL_COPT_SS_ANSI_NPW

SQL_COPT_SS_ANSI_NPW habilita ou desabilita o uso de manuseio ISO de NULL em comparações e concatenação, preenchimento do tipo de dados caractere e advertências. Para obter mais informações, consulte SET ANSI_NULLS, SET ANSI_PADDING, SET ANSI_WARNINGS e SET CONCAT_NULL_YIELDS_NULL.

Valor

Descrição

SQL_AD_ON

Padrão. A conexão usa comportamento padrão do ANSI para manusear comparações de NULL, preenchimento, advertências e concatenações de NULL.

SQL_AD_OFF

A conexão usa a manipulação de NULL, preenchimento de tipo de dados caractere e advertências definida pelo SQL Server.

Se você usar pool de conexões, SQL_COPT_SS_ANSI_NPW deverá ser definido na cadeia de conexão, em vez de usar SQLSetConnectAttr. Depois que uma conexão for feita, qualquer tentativa para alterar este atributo falhará em modo silencioso quando o pool de conexões for usado.

SQL_COPT_SS_ATTACHDBFILENAME

SQL_COPT_SS_ATTACHDBFILENAME especifica o nome do arquivo primário de um banco de dados anexável. Esse banco de dados é anexado e torna-se o banco de dados padrão da conexão. Para usar SQL_COPT_SS_ATTACHDBFILENAME, você deve especificar o nome do banco de dados como valor do atributo de conexão SQL_ATTR_CURRENT_CATALOG ou no parâmetro DATABASE = de um SQLDriverConnect. Se o banco de dados tiver sido anexado previamente, SQL Server não o anexará novamente.

Valor

Descrição

SQLPOINTER para uma cadeia de caracteres

A cadeia de caracteres contém o nome do arquivo primário para o banco de dados se anexar. Inclua o caminho completo do nome do arquivo.

SQL_COPT_SS_BCP

SQL_COPT_SS_BCP habilita funções de cópia em massa em uma conexão. Para obter mais informações, consulte Funções de cópia em massa.

Valor

Descrição

SQL_BCP_OFF

Padrão. Funções de cópia em massa não estão disponíveis na conexão.

SQL_BCP_ON

Funções de cópia em massa estão disponíveis na conexão.

SQL_COPT_SS_BROWSE_CONNECT

Este atributo é usado para personalizar o conjunto de resultados retornado por SQLBrowseConnect. SQL_COPT_SS_BROWSE_CONNECT habilita ou desabilita o retorno de informações adicionais de uma instância enumerada de SQL Server. Isto pode incluir informações como se o servidor é um cluster, nomes de instâncias diferentes e o número de versão.

Valor

Descrição

SQL_MORE_INFO_NO

Padrão. Retorna uma lista de servidores.

SQL_MORE_INFO_YES

No SQL Server 7.0, SQLBrowseConnect retorna uma lista de servidores; nas outras versões SQLBrowseConnect retorna uma cadeia de caracteres estendida de propriedades de servidor.

SQL_COPT_SS_BROWSE_SERVER

Este atributo é usado para personalizar o conjunto de resultados retornado por SQLBrowseConnect. SQL_COPT_SS_BROWSE_SERVER especifica o nome do servidor cujas informações SQLBrowseConnect passa como retorno.

Valor

Descrição

computername

O SQLBrowseConnect retorna uma lista de instâncias de SQL Server no computador especificado. Não devem ser usadas barras invertidas duplas (\\) para o nome do servidor (por exemplo, em vez de \\MyServer, deve ser usado MyServer).

NULL

Padrão. O SQLBrowseConnect retorna informações de todos os servidores no domínio.

SQL_COPT_SS_CONCAT_NULL

SQL_COPT_SS_CONCAT_NULL habilita ou desabilita o uso de manuseio ISO de NULL ao concatenar cadeias. Para obter mais informações, consulte SET CONCAT_NULL_YIELDS_NULL.

Valor

Descrição

SQL_CN_ON

Padrão. A conexão usa o comportamento padrão ISO para manusear valores NULL ao concatenar cadeias.

SQL_CN_OFF

A conexão usa o comportamento definido por SQL Server para manusear valores NULL ao concatenar cadeias.

SQL_COPT_SS_ENCRYPT

Controla a criptografia de uma conexão.

A criptografia usa o certificado no servidor. Isto deve ser verificado por uma autoridade de certificação, a menos que o atributo da conexão SQL_COPT_SS_TRUST_SERVER_CERTIFICATE seja definido como SQL_TRUST_SERVER_CERTIFICATE_YES ou a cadeia de conexão contenha "TrustServerCertificate=yes". Se qualquer uma destas condições for verdadeira, um certificado gerado e assinado pelo servidor poderá ser usado para criptografar a conexão se não houver nenhum certificado no servidor.

Valor

Descrição

SQL_EN_ON

A conexão será criptografada.

SQL_EN_OFF

A conexão não será criptografada. Este é o padrão.

SQL_COPT_SS_ENLIST_IN_DTC

O cliente chama o método ITransactionDispenser::BeginTransaction do OLE DB do MS DTC (Coordenador de Transações Distribuídas da Microsoft): para iniciar uma transação do MS DTC e criar um objeto de transação do MS DTC que representa a transação. Em seguida, o aplicativo chama SQLSetConnectAttr com a opção de SQL_COPT_SS_ENLIST_IN_DTC para associar o objeto de transação com a conexão ODBC. Todas as atividades de banco de dados relacionadas serão executadas sob a proteção da transação do MS DTC. O aplicativo chama SQLSetConnectAttr com SQL_DTC_DONE para encerrar a associação de DTC da conexão. Para obter mais informações, consulte Transações distribuídas MS DTC.

Valor

Descrição

Objeto DTC*

O objeto de transação OLE do MS DTC que especifica a transação a ser exportada para o SQL Server.

SQL_DTC_DONE

Delimita o término de uma transação de DTC.

SQL_COPT_SS_ENLIST_IN_XA

Para iniciar uma transação XA com um TP (Processador de Transações) compatível com XA, o cliente chama a função tx_begin do Open Group. Em seguida, o aplicativo chama SQLSetConnectAttr com um parâmetro SQL_COPT_SS_ENLIST_IN_XA com valor TRUE para associar a transação XA com a conexão ODBC. Todas as atividades de banco de dados relacionadas serão executadas sob a proteção da transação XA. Para encerrar uma associação de XA com uma conexão ODBC, o cliente deve chamar SQLSetConnectAttr com um parâmetro SQL_COPT_SS_ENLIST_IN_XA com valor FALSE. Para obter mais informações, consulte a documentação do MS DTC.

SQL_COPT_SS_FALLBACK_CONNECT

Não é mais dado suporte a este atributo porque o SQL Server Native Client não dá suporte à conexão ao SQL Server 6.5.

SQL_COPT_SS_FAILOVER_PARTNER

Usado para especificar ou recuperar o nome do parceiro de failover usado para espelhamento de banco de dados no SQL Server. É uma cadeia de caracteres com terminação null que deve ser definida antes que a conexão ao SQL Server seja feita inicialmente.

Depois de fazer a conexão, o aplicativo pode consultar este atributo usando SQLGetConnectAttr para determinar a identidade do parceiro de failover. Se o servidor primário não tiver nenhum parceiro de failover, esta propriedade retornará uma cadeia de caracteres vazia. Isto permite que um aplicativo inteligente armazene em cache o servidor de backup determinado mais recentemente, mas tais aplicativos devem estar cientes de que as informações serão atualizadas somente depois que a conexão for estabelecida ou redefinida, se estiver em pool, e poderão ficar desatualizadas em conexões de longo prazo.

Para obter mais informações, consulte Usando o espelhamento de banco de dados.

SQL_COPT_SS_INTEGRATED_SECURITY

SQL_COPT_SS_INTEGRATED_SECURITY força o uso da autenticação do Windows para validação de acesso no logon do servidor. Quando a autenticação de Windows é usada, o driver ignora os valores do identificador de usuário e da senha fornecidos como parte do processamento de SQLConnect, SQLDriverConnect ou SQLBrowseConnect.

Valor

Descrição

SQL_IS_OFF

Padrão. SQL Server Autenticação é usada para validar o identificador de usuário e a senha no logon.

SQL_IS_ON

O modo de autenticação do Windows é usado para validar os direitos de acesso de um usuário ao SQL Server.

SQL_COPT_SS_MARS_ENABLED

Este atributo habilita ou desabilita MARS (Vários Conjuntos de Resultados Ativos). Por padrão, MARS está desabilitado. Este atributo deve ser definido antes de fazer uma conexão com SQL Server. Depois que a conexão com SQL Server é aberta, o MARS permanecerá habilitado ou desabilitado durante toda a duração da conexão.

Valor

Descrição

SQL_MARS_ENABLED_NO

Padrão. MARS está desabilitado.

SQL_MARS_ENABLED_YES

MARS está habilitado.

Para obter mais informações sobre MARS, consulte Usando MARS (vários conjuntos de resultados ativos).

SQL_COPT_SS_OLDPWD

A expiração de senha para Autenticação do SQL Server foi introduzida no SQL Server 2005. O atributo SQL_COPT_SS_OLDPWD foi adicionado para permitir que o cliente forneça tanto a senha antiga quanto a nova para a conexão. Quando esta propriedade está definida, o provedor não usará o pool de conexões para a primeira conexão, nem para as conexões seguintes, visto que a cadeia de conexão irá conter a “senha antiga”, que agora mudou.

Para obter mais informações, consulte Alterando senhas programaticamente.

Valor

Descrição

SQL_COPT_SS_OLD_PASSWORD

SQLPOINTER para uma cadeia de caracteres que contém a senha antiga. Este é um valor somente gravação e deve ser definido antes da conexão ao servidor.

SQL_COPT_SS_PERF_DATA

SQL_COPT_SS_PERF_DATA inicia ou para log de dados de desempenho. O nome do arquivo de log de dados deve ser definido antes de iniciar o log de dados. Consulte SQL_COPT_SS_PERF_DATA_LOG, a seguir.

Valor

Descrição

SQL_PERF_START

Inicia o driver de amostragem de dados de desempenho.

SQL_PERF_STOP

Para a amostragem de dados de desempenho pelos contadores.

Para obter mais informações, consulte SQLGetConnectAttr.

SQL_COPT_SS_PERF_DATA_LOG

SQL_COPT_SS_PERF_DATA_LOG atribui o nome do arquivo de log usado para registrar dados de desempenho. O nome de arquivo de log é uma cadeia de caracteres ANSI ou Unicode terminada por null, dependendo da compilação do aplicativo. O argumento StringLength deve ser SQL_NTS.

SQL_COPT_SS_PERF_DATA_LOG_NOW

SQL_COPT_SS_PERF_DATA_LOG_NOW instrui o driver a escrever uma entrada de log de estatística em disco. O argumento StringLength deve ser SQL_NTS.

SQL_COPT_SS_PERF_QUERY

SQL_COPT_SS_PERF_QUERY inicia ou para de gerar logs para consultas de longa execução. O nome do arquivo de log da consulta deve ser fornecido antes de iniciar a geração de log. O aplicativo pode definir o que é “longa execução” definindo o intervalo para geração de log.

Valor

Descrição

SQL_PERF_START

Inicia a geração de log de consultas de longa execução.

SQL_PERF_STOP

Para a geração de log de consultas de longa execução.

Para obter mais informações, consulte SQLGetConnectAttr.

SQL_COPT_SS_PERF_QUERY_INTERVAL

SQL_COPT_SS_PERF_QUERY_INTERVAL define o limite de log de consultas em milissegundos. Consultas que não são resolvidas dentro do limite são registradas no arquivo de log de consultas de longa execução. Não há nenhum limite superior para o limite de consulta. Um valor de limite de consulta igual a zero faz todas as consultas serem registradas no log.

SQL_COPT_SS_PERF_QUERY_LOG

SQL_COPT_SS_PERF_QUERY_LOG atribui o nome de um arquivo de log para registrar dados de consultas de longa execução. O nome de arquivo de log é uma cadeia de caracteres ANSI ou Unicode terminada por null, dependendo da compilação do aplicativo. O argumento StringLength deve ser SQL_NTS ou o comprimento da cadeia de caracteres em bytes.

SQL_COPT_SS_PRESERVE_CURSORS

Este atributo permite consultar e definir se a conexão preservará o(s) cursor(es) quando você confirmar/reverter uma transação. A configuração é SQL_PC_ON ou SQL_PC_OFF. O valor padrão é SQL_PC_OFF. Esta configuração controla se o driver fechará o(s) cursor(es) para você quando você chamar SQLEndTran (ou SQLTransact).

Valor

Descrição

SQL_PC_OFF

Padrão. Os cursores são fechados quando a transação é confirmada ou revertida usando SQLEndTran.

SQL_PC_ON

Os cursores não são fechados quando a transação é confirmada ou revertida usando SQLEndTran, exceto quando é usado um cursor estático ou de conjunto de chaves em modo assíncrono. Se uma reversão for emitida enquanto o preenchimento do cursor não estiver terminado, o cursor será fechado.

SQL_COPT_SS_QUOTED_IDENT

SQL_COPT_SS_QUOTED_IDENT permite identificadores entre aspas em instruções de ODBC e Transact-SQL enviadas na conexão. Fornecendo identificadores entre aspas, o driver ODBC do SQL Server Native Client permite nomes de objetos que seriam inválidos de outras formas, como "My Table", que contém um caractere de espaço no identificador. Para obter mais informações, consulte SET QUOTED_IDENTIFIER.

Valor

Descrição

SQL_QI_OFF

A conexão SQL Server não permite identificadores entre aspas em Transact-SQL enviados.

SQL_QI_ON

Padrão. A conexão permite identificadores entre aspas em Transact-SQL enviados.

SQL_COPT_SS_TRANSLATE

SQL_COPT_SS_TRANSLATE faz o driver traduzir caracteres entre as páginas de código de cliente e de servidor à medida que os dados de MBCS são trocados. O atributo afeta somente dados armazenados em colunas char, varchar e de text do SQL Server.

Valor

Descrição

SQL_XL_OFF

O driver não traduz caracteres de uma página de código para outra em dados de caractere trocados entre o cliente e o servidor.

SQL_XL_ON

Padrão. O driver traduz caracteres de uma página de código para outra em dados de caractere trocados entre o cliente e o servidor. O driver configura a tradução de caractere automaticamente, determinando a página de código instalada no servidor e aquela que está sendo usada pelo cliente.

SQL_COPT_SS_TRUST_SERVER_CERTIFICATE

SQL_COPT_SS_TRUST_SERVER_CERTIFICATE faz o driver habilitar ou desabilitar a validação de certificado ao usar criptografia. Este atributo é um valor de leitura/gravação, mas defini-lo depois que uma conexão é estabelecida não tem nenhum efeito.

Aplicativos cliente podem consultar esta propriedade depois que uma conexão foi aberta para determinar as configurações efetivas de criptografia e validação em uso.

Valor

Descrição

SQL_TRUST_SERVER_CERTIFICATE_NO

Padrão. A criptografia sem validação de certificado não está habilitada.

SQL_TRUST_SERVER_CERTIFICATE_YES

A criptografia sem validação de certificado está habilitada.

SQL_COPT_SS_TXN_ISOLATION

SQL_COPT_SS_TXN_ISOLATION define o atributo de isolamento de instantâneo específico do SQL Server. O isolamento de instantâneo não pode ser definido usando SQL_ATTR_TXN_ISOLATION porque o valor é específico do SQL Server. Entretanto, ele pode ser recuperado usando SQL_ATTR_TXN_ISOLATION ou SQL_COPT_SS_TXN_ISOLATION.

Valor

Descrição

SQL_TXN_SS_SNAPSHOT

Indica que, a partir de uma transação, você não pode consultar alterações feitas em outras transações e que você não pode ver as alterações, nem mesmo quando refizer a consulta.

Para obter mais informações sobre isolamento de instantâneo, consulte Trabalhando com isolamento de instantâneo.

SQL_COPT_SS_USE_PROC_FOR_PREP

Não é mais dado suporte a este atributo porque o SQL Server Native Client não dá suporte à conexão ao SQL Server 6.5.

SQL_COPT_SS_USER_DATA

SQL_COPT_SS_USER_DATA define o ponteiro de dados do usuário. Os dados do usuário são uma memória de propriedade do cliente registrada para cada conexão.

Para obter mais informações, consulte SQLGetConnectAttr.

SQL_COPT_SS_WARN_ON_CP_ERROR

Este atributo determina se você receberá um aviso se houver perda de dados durante uma conversão de página de código. Isto se aplica somente a dados que vêm do servidor.

Valor

Descrição

SQL_WARN_YES

Gerar avisos quando há perda de dados durante uma conversão de página de código.

SQL_WARN_NO

Não gerar avisos quando há perda de dados durante uma conversão de página de código.

Suporte do SQLSetConnectAttr a SPNs (Nomes da Entidade de Serviço)

O SQLSetConnectAttr pode ser usado para definir o valor dos novos atributos de conexão SQL_COPT_SS_SERVER_SPN e SQL_COPT_SS_FAILOVER_PARTNER_SPN. Estes atributos não podem ser definidos quando uma conexão estiver aberta; se você tentar definir estes atributos quando uma conexão estiver aberta, o erro HY011 será passado como retorno, com a mensagem "Operação inválida neste momento". (SQLSetConnectOption também pode ser usado para definir estes valores).

Para obter mais informações sobre SPNs, consulte SPNs (Nomes da Entidade de Serviço) em conexões de cliente (ODBC).

SQL_COPT_SS_CONNECTION_DEAD

Este é um atributo somente leitura.

Para obter mais informações sobre SQL_COPT_SS_CONNECTION_DEAD, consulte SQLGetConnectAttr e Conectando-se a uma fonte de dados (ODBC).

Exemplo

Este exemplo faz o log de dados de desempenho.

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...