Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os parâmetros de entrada que se referem a dados de caracteres de comprimento variável (como nomes de coluna, parâmetros dinâmicos e valores de atributo de cadeia de caracteres) têm um parâmetro de comprimento associado. Se o aplicativo terminar strings com o caractere nulo, como é típico em C, ele fornece como argumento o comprimento em bytes da string (sem incluir o terminador nulo) ou SQL_NTS (string terminada por nulo). Um argumento de comprimento não negativo especifica o comprimento real da cadeia de caracteres associada. O argumento de comprimento pode ser 0 para especificar uma cadeia de caracteres de comprimento zero, que é distinta de um valor NULL. O valor negativo SQL_NTS orienta o driver a determinar o comprimento da cadeia de caracteres localizando o caractere de terminação nula.
Quando os dados de caractere são retornados do driver para o aplicativo, o driver deve sempre terminá-los com um caractere nulo. Isso fornece ao aplicativo a opção de manipular os dados como uma cadeia de caracteres ou uma matriz de caracteres. Se o buffer do aplicativo não for grande o suficiente para retornar todos os dados de caractere, o driver os trunca até o comprimento em bytes do buffer menos o número de bytes exigido pelo caractere de terminação nula, adiciona a terminação nula aos dados truncados e os armazena no buffer. Portanto, os aplicativos sempre devem alocar espaço extra para o caractere de terminação nula em buffers usados para recuperar dados de caractere. Por exemplo, um buffer de 51 bytes é necessário para recuperar 50 caracteres de dados.
Cuidados especiais devem ser tomados pelo aplicativo e pelo driver ao enviar ou recuperar dados de caracteres longos em partes com SQLPutData ou SQLGetData. Se os dados forem passados como uma série de cadeias de caracteres terminadas em nulo, os caracteres de terminação nula nessas cadeias de caracteres deverão ser removidos antes que os dados possam ser remontados.
Vários programadores ODBC confundiram dados de caractere e cadeias de caracteres C. Isso ocorreu é um artefato do uso da linguagem C ao definir funções ODBC. Se um driver ODBC ou aplicativo usar outro idioma - lembre-se de que o ODBC é independente de idioma - essa confusão é menos provável de surgir.
Quando as cadeias de caracteres C são usadas para armazenar dados de caractere, o caractere de terminação nula não é considerado parte dos dados e não é contado como parte de seu comprimento de byte. Por exemplo, os dados de caractere "ABC" podem ser mantidos como a cadeia de caracteres C "ABC\0" ou a matriz de caracteres {'A', 'B', 'C'}. O comprimento de bytes dos dados é 3, sendo ou não tratado como uma cadeia de caracteres ou uma matriz de caracteres.
Embora aplicativos e drivers geralmente usem cadeias de caracteres C (matrizes de caracteres terminadas em nulo) para armazenar dados de caractere, não há nenhum requisito para fazer isso. Em C, os dados de caractere também podem ser tratados como uma matriz de caracteres (sem terminação nula) e seu comprimento de byte passado separadamente no buffer de comprimento/indicador.
Como os dados de caracteres podem ser mantidos em uma matriz não encerrada com nulo e seu comprimento em bytes pode ser passado separadamente, é possível inserir caracteres nulos nesses dados de caracteres. No entanto, o comportamento das funções ODBC nesse caso é indefinido, e cabe ao driver específico lidar com isso corretamente. Portanto, aplicativos interoperáveis sempre devem lidar com dados de caractere que podem conter caracteres nulos inseridos como dados binários.