Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O buffer de comprimento/indicador é usado para passar o comprimento do byte dos dados no buffer de dados ou um indicador especial como SQL_NULL_DATA, que indica que os dados são NULL. Dependendo da função em que é utilizado, um buffer de comprimento/indicador é definido como um SQLINTEGER ou um SQLSMALLINT. Por isso, é necessário um único argumento para a descrever. Se o buffer de dados for um buffer de entrada não diferido, este argumento contém o comprimento do byte dos próprios dados ou um valor indicador. É frequentemente nomeado StrLen_or_Ind ou semelhante. Por exemplo, o código seguinte chama SQLPutData para passar um buffer cheio de dados; o comprimento do byte (ValueLen) é passado diretamente porque o buffer de dados (ValuePtr) é um buffer de entrada.
SQLCHAR ValuePtr[50];
SQLINTEGER ValueLen;
// Call local function to place data in ValuePtr. In ValueLen, return the
// number of bytes of data placed in ValuePtr. If there is not enough
// data, this will be less than 50.
FillBuffer(ValuePtr, sizeof(ValuePtr), &ValueLen);
// Call SQLPutData to send the data to the driver.
SQLPutData(hstmt, ValuePtr, ValueLen);
Se o buffer de dados for um buffer de entrada diferido, um buffer de saída não diferido ou um buffer de saída, o argumento contém o endereço do buffer de comprimento/indicador. É frequentemente chamado StrLen_or_IndPtr ou de um nome semelhante. Por exemplo, o código seguinte chama SQLGetData para recuperar um buffer cheio de dados; o comprimento do byte é devolvido à aplicação no buffer de comprimento/indicador (ValueLenOrInd), cujo endereço é passado para SQLGetData porque o buffer de dados correspondente (ValuePtr) é um buffer de saída não diferido.
SQLCHAR ValuePtr[50];
SQLINTEGER ValueLenOrInd;
SQLGetData(hstmt, 1, SQL_C_CHAR, ValuePtr, sizeof(ValuePtr), &ValueLenOrInd);
A menos que seja especificamente proibido, um argumento de buffer de comprimento/indicador pode ser 0 (se for entrada não adiada) ou um ponteiro nulo (se for saída ou entrada adiada). Para buffers de entrada, isto faz com que o driver ignore o comprimento do byte dos dados. Isto devolve um erro ao passar dados de comprimento variável, mas é comum ao passar dados não nulos de comprimento fixo, porque não é necessário nem um valor de comprimento nem de indicador. Para buffers de saída, isto faz com que o driver não devolva o comprimento do byte dos dados nem um valor indicador. Isto é um erro se os dados devolvidos pelo driver forem NULOS, mas é comum ao recuperar dados de comprimento fixo e não anuláveis, porque não é necessário nem um comprimento nem um valor indicador.
Tal como quando o endereço de um buffer de dados diferido é passado para o driver, o endereço de um buffer de comprimento/indicador diferido deve permanecer válido até que o buffer seja desvinculado.
Os seguintes comprimentos são válidos como valores de comprimento/indicadores:
n, onde n> 0.
-
SQL_NTS. Uma cadeia enviada ao driver no buffer de dados correspondente é terminada por null; esta é uma forma conveniente para programadores em C passarem strings sem terem de calcular o seu comprimento de bytes. Este valor é legal apenas quando a aplicação envia dados para o condutor. Quando o driver devolve dados à aplicação, devolve sempre o comprimento real do byte dos dados.
Os valores seguintes são válidos como valores de comprimento/indicadores. SQL_NULL_DATA é armazenado no descritor de campo SQL_DESC_INDICATOR_PTR; todos os outros valores são armazenados no descritor de campo SQL_DESC_OCTET_LENGTH_PTR.
SQL_NULL_DATA. Os dados são um valor de dados NULL, e o valor no correspondente buffer de dados é ignorado. Este valor é legal apenas para dados SQL enviados ou recuperados do driver.
SQL_DATA_AT_EXEC. O buffer de dados não contém quaisquer dados. Em vez disso, os dados serão enviados com SQLPutData quando a instrução for executada, ou quando SQLBulkOperations ou SQLSetPos forem chamados. Este valor é legal apenas para dados SQL enviados ao driver. Para mais informações, consulte SQLBindParameter, SQLBulkOperations e SQLSetPos.
Resultado do macro SQL_LEN_DATA_AT_EXEC(comprimento). Este valor é semelhante ao SQL_DATA_AT_EXEC. Para mais informações, consulte Envio de Dados Longos.
SQL_NO_TOTAL. O driver não pode determinar o número de bytes de dados longos ainda disponíveis para devolver num buffer de saída. Este valor é legal apenas para dados SQL recuperados do driver.
SQL_DEFAULT_PARAM. Um procedimento consiste em usar o valor padrão de um parâmetro de entrada num procedimento em vez do valor no buffer de dados correspondente.
SQL_COLUMN_IGNORE. SQLBulkOperations ou SQLSetPos é ignorar o valor no buffer de dados. Ao atualizar uma linha de dados através de uma chamada para SQLBulkOperations ou SQLSetPos, o valor da coluna não é alterado. Ao inserir uma nova linha de dados através de uma chamada para SQLBulkOperations, o valor da coluna é definido para o seu padrão ou, se a coluna não tiver um padrão, para NULL.