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.
O comprimento dos dados é o comprimento de bytes dos dados, pois eles seriam armazenados no buffer de dados do aplicativo, não como eles são armazenados na fonte de dados. Essa distinção é importante porque os dados geralmente são armazenados em tipos diferentes no buffer de dados do que na fonte de dados. Portanto, para os dados que estão sendo enviados para a fonte de dados, esse é o comprimento de bytes dos dados antes da conversão para o tipo da fonte de dados. Para dados recuperados da fonte de dados, esse é o comprimento de bytes dos dados após a conversão para o tipo do buffer de dados e antes de qualquer truncamento ser feito.
Para dados de comprimento fixo, como um inteiro ou uma estrutura de data, o comprimento de bytes dos dados é sempre o tamanho do tipo de dados. Em geral, os aplicativos alocam um buffer de dados que é do tamanho do tipo de dados. Se o aplicativo alocar um buffer menor, as consequências serão indefinidas porque o driver pressupõe que o buffer de dados seja do tamanho do tipo de dados e não trunque os dados para caber em um buffer menor. Se o aplicativo alocar um buffer maior, o espaço extra nunca será usado.
Para dados de comprimento variável, como caracteres ou dados binários, é importante reconhecer que o comprimento de bytes dos dados é separado e geralmente diferente do comprimento do byte do buffer. A relação desses dois comprimentos é descrita na seção Buffers . Se o comprimento de byte dos dados for maior que o comprimento de byte do buffer, o driver truncará os dados buscados para o comprimento de byte do buffer e retornará SQL_SUCCESS_WITH_INFO com SQLSTATE 01004 (Dados truncados). No entanto, o comprimento de bytes retornado é o comprimento dos dados não truncados.
Por exemplo, suponha que um aplicativo aloque 50 bytes para um buffer de dados binário. Se o driver tiver 10 bytes de dados binários a serem retornados, ele retornará esses 10 bytes no buffer. O comprimento de bytes dos dados é 10 e o comprimento do byte do buffer é 50. Se o driver tiver 60 bytes de dados binários a serem retornados, ele truncará os dados para 50 bytes, retornará esses bytes no buffer e retornará SQL_SUCCESS_WITH_INFO. O comprimento de bytes dos dados é 60 (o comprimento antes do truncamento) e o comprimento do byte do buffer ainda é 50.
Um registro de diagnóstico é criado para cada coluna truncada. Como leva tempo para o driver criar esses registros e para que o aplicativo os processe, o truncamento pode prejudicar o desempenho. Normalmente, um aplicativo pode evitar esse problema alocando buffers grandes o suficiente, embora isso possa não ser possível ao trabalhar com dados longos. Quando ocorre truncamento de dados, o aplicativo às vezes pode alocar um buffer maior e refetar os dados; isso não é verdade em todos os casos. Se ocorrer truncamento ao obter dados com chamadas para SQLGetData, o aplicativo não precisará chamar SQLGetData para obter dados que já foram retornados; para obter mais informações, consulte Como obter dados longos.