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çã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...
Consulte também