Configurar valores de parâmetro

Para definir o valor de um parâmetro, o aplicativo simplesmente define o valor da variável vinculada ao parâmetro. Não é importante quando esse valor é definido, desde que seja definido antes da execução da instrução. O aplicativo pode definir o valor antes ou após vincular a variável e pode alterar o valor quantas vezes desejar. Quando a instrução é executada, o driver simplesmente recupera o valor atual da variável. Isso é particularmente útil quando uma instrução preparada é executada mais de uma vez; o aplicativo define novos valores para algumas das variáveis ou todas elas sempre que a instrução é executada. Para obter um exemplo disso, consulte Execução preparada, anteriormente nesta seção.

Se um buffer de comprimento/indicador foi vinculado na chamada a SQLBindParameter, ele deverá ser definido como um dos seguintes valores antes que a instrução seja executada:

  • O comprimento em bytes dos dados na variável associada. O driver verificará esse comprimento somente se a variável for caractere ou binária (se ValueType for SQL_C_CHAR ou SQL_C_BINARY).

  • SQL_NTS. Os dados são uma cadeia de caracteres terminada em nulo.

  • SQL_NULL_DATA. O valor dos dados é NULL e o driver ignora o valor da variável associada.

  • SQL_DATA_AT_EXEC ou o resultado da macro SQL_LEN_DATA_AT_EXEC. O valor do parâmetro deve ser enviado com SQLPutData. Para obter mais informações, consulte Enviar dados long, mais adiante nesta seção.

A tabela a seguir mostra os valores da variável associada e do buffer de comprimento/indicador que o aplicativo define para uma variedade de valores de parâmetros.

Parâmetro

value
Parâmetro

(SQL)

tipo de dados
Variável (C)

tipo de dados
Valor em

bound

variable
Valor em

comprimento/indicador

buffer[d]
"ABC" SQL_CHAR SQL_C_CHAR ABC\0[a] SQL_NTS ou 3
10 SQL_INTEGER SQL_C_SLONG 10 --
10 SQL_INTEGER SQL_C_CHAR 10\0[a] SQL_NTS ou 2
13h SQL_TYPE_TIME SQL_C_TYPE_TIME 13,0,0[b] --
13h SQL_TYPE_TIME SQL_C_CHAR {t '13:00:00'}\0[a], [c] SQL_NTS ou 14
NULO SQL_SMALLINT SQL_C_SSHORT -- SQL_NULL_DATA

[a] "\0" representa um caractere de terminação nula. O caractere de terminação nula será necessário somente se o valor no buffer de comprimento/indicador for SQL_NTS.

[b] Os números nessa lista são os números armazenados nos campos da estrutura TIME_STRUCT.

[c] A cadeia de caracteres usa a cláusula de escape de data ODBC. Para obter mais informações, consulte Literais de Data, Hora e Carimbo de data/hora.

[d] Os drivers devem sempre verificar esse valor para confirmar se é um valor especial, como SQL_NULL_DATA.

O que um driver faz com um valor de parâmetro em tempo de execução depende do driver. Se necessário, o driver converte o valor do tipo de dados C e comprimento de byte da variável associada para o tipo de dados SQL, precisão e escala do parâmetro. Na maioria dos casos, o driver envia o valor para a fonte de dados. Em alguns casos, ele formata o valor como texto e o insere na instrução SQL antes de enviar a instrução à fonte de dados.