SQL para C: caractere
Os identificadores para os tipos de dados SQL ODBC de caractere são os seguintes:
- SQL_CHAR
- SQL_VARCHAR
- SQL_LONGVARCHAR
- SQL_WCHAR
- SQL_WVARCHAR
- SQL_WLONGVARCHAR
A tabela a seguir mostra os tipos de dados ODBC C para os quais os dados SQL de caracteres podem ser convertidos. Para obter uma explicação das colunas e termos na tabela, consulte Convertendo dados de tipos de dados SQL para C.
Identificador de tipo C | Teste | TargetValuePtr | Strlen_or_indptr | SQLSTATE |
---|---|---|---|---|
SQL_C_CHAR | Comprimento de bytes de dados <BufferLength Comprimento de bytes de dados >= BufferLength |
Dados Dados truncados |
Comprimento dos dados em bytes Comprimento dos dados em bytes |
n/d 01004 |
SQL_C_WCHAR | Comprimento do caractere de dados <BufferLength Comprimento do caractere de dados >= BufferLength |
Dados Dados truncados |
Comprimento dos dados em caracteres Comprimento dos dados em caracteres |
n/d 01004 |
SQL_C_STINYINT SQL_C_UTINYINT SQL_C_TINYINT SQL_C_SBIGINT SQL_C_UBIGINT SQL_C_SSHORT SQL_C_USHORT SQL_C_SHORT SQL_C_SLONG SQL_C_ULONG SQL_C_LONG SQL_C_NUMERIC | Dados convertidos sem truncamento[b] Dados convertidos com truncamento de dígitos fracionários[a] A conversão de dados resultaria na perda de dígitos inteiros (em vez de fracionários) [a] Os dados não são um literal numérico[b] |
Dados Dados truncados Indefinido Indefinido |
Número de bytes do tipo de dados C Número de bytes do tipo de dados C Indefinido Indefinido |
n/d 01S07 22003 22018 |
SQL_C_FLOAT SQL_C_DOUBLE | Os dados estão dentro do intervalo do tipo de dados no qual o número está sendo convertido[a] Os dados estão fora do intervalo do tipo de dados no qual o número está sendo convertido[a] Os dados não são um literal numérico[b] |
Dados Indefinido Indefinido |
Tamanho do tipo de dados C Indefinido Indefinido |
n/d 22003 22018 |
SQL_C_BIT | Os dados são 0 ou 1 Os dados são maiores que 0, menores que 2 e não são iguais a 1 Os dados são menores que 0 ou maiores ou iguais a 2 Os dados não são um literal numérico |
Dados Dados truncados Indefinido Indefinido |
1[b] 1[b] Indefinido Indefinido |
n/d 01S07 22003 22018 |
SQL_C_BINARY | Comprimento de bytes de dados <= BufferLength Comprimento de bytes de dados >BufferLength |
Dados Dados truncados |
Comprimento dos dados em bytes Comprimento dos dados |
n/d 01004 |
SQL_C_TYPE_DATE | O valor de dados é um valor de data válido[a] O valor de dados é um valor de carimbo de data/hora válido; a parte de tempo é zero[a] O valor de dados é um valor de carimbo de data/hora válido; a parte de tempo é diferente de zero[a],[c] O valor de dados não é um valor de data/hora válido ou um valor de carimbo de data/hora[a] |
Dados Dados Dados truncados Indefinido |
6[b] 6[b] 6[b] Indefinido |
n/d n/d 01S07 22018 |
SQL_C_TYPE_TIME | O valor de dados é um valor de tempo válido e o valor de segundos fracionários é 0[a] O valor de dados é um valor de carimbo de data/hora válido ou um valor de tempo válido; a parte de segundos fracionários é zero[a],[d] O valor de dados é um valor de carimbo de data/hora válido; a parte de segundos fracionários é diferente de zero[a],[d],[e] O valor de dados não é um valor de data/hora válido ou um valor de carimbo de data/hora[a] |
Dados Dados Dados truncados Indefinido |
6[b] 6[b] 6[b] Indefinido |
n/d n/d 01S07 22018 |
SQL_C_TYPE_TIMESTAMP | O valor de dados é um valor de carimbo de data/hora válido ou um valor de tempo válido; fração de segundos porção não truncada[a] O valor de dados é um valor de carimbo de data/hora válido ou um valor de tempo válido; fração de segundos porção truncada[a] O valor de dados é um valor de data válido[a] O valor de dados é um valor de tempo válido[a] O valor de dados não é um valor de data e hora válido, um valor de data/hora ou um valor de carimbo de data/hora[a] |
Dados Dados truncados Dados[f] Dados[g] Indefinido |
16[b] 16[b] 16[b] 16[b] Indefinido |
n/d 01S07 n/d n/d 22018 |
Todos os tipos de intervalo C | O valor de dados é um valor de intervalo válido; sem truncamento O valor de dados é um valor de intervalo válido; truncamento de um ou mais campos à direita Os dados são um intervalo válido; precisão significativa do campo à esquerda é perdida O valor de dados não é um valor de intervalo válido |
Dados Dados truncados Indefinido Indefinido |
Comprimento dos dados em bytes Comprimento dos dados em bytes Indefinido Indefinido |
n/d 01S07 22015 22018 |
[a] O valor de BufferLength é ignorado para essa conversão. O driver pressupõe que o tamanho de *TargetValuePtr seja do tamanho do tipo de dados C.
[b] Esse é o tamanho do tipo de dados C correspondente.
[c] A parte de tempo do valor do carimbo de data/ hora é truncada.
[d] A parte de data do carimbo de data/hora-valor é ignorada.
[e] A parte de segundos fracionários do carimbo de data/hora é truncada.
[f] Os campos de tempo da estrutura de carimbo de data/hora são definidos como zero.
[g] Os campos de data da estrutura de carimbo de data/hora são definidos como a data atual.
Espaços extras
Os espaços à esquerda e à direita são ignorados quando os dados de caracteres SQL são convertidos em qualquer um dos seguintes tipos:
- date
- numeric
- time
- timestamp
- dados do intervalo C