MDAC 2.5 SDK - ODBC Programmer's Reference
Appendix D: Data Types


 

SQL to C: Character

The identifiers for the character ODBC SQL data types are:

SQL_CHAR
SQL_VARCHAR
SQL_LONGVARCHAR
SQL_WCHAR
SQL_WVARCHAR
SQL_WLONGVARCHAR

The following table shows the ODBC C data types to which character SQL data may be converted. For an explanation of the columns and terms in the table, see "Converting Data from SQL to C Data Types," earlier in this appendix.

C type identifier Test *TargetValuePtr *StrLen_or_IndPtr SQLSTATE
SQL_C_CHAR Byte length of data < BufferLength

Byte length of data >= BufferLength

Data

Truncated data

Length of data in bytes

Length of data in bytes

n/a

01004

SQL_C_WCHAR Character length of data < BufferLength

Character length of data >= BufferLength

Data

Truncated data

Length of data in characters

Length of data in characters

n/a

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
Data converted without truncation[b]

Data converted with truncation of fractional digits[a]

Conversion of data would result in loss of whole (as opposed to fractional) digits[a]

Data is not a numeric-literal[b]

Data


Truncated data

Undefined



Undefined

Number of bytes of the C data type

Number of bytes of the C data type

Undefined



Undefined

n/a


01S07

22003



22018

SQL_C_FLOAT
SQL_C_DOUBLE
Data is within the range of the data type to which the number is being converted[a]

Data is outside the range of the data type to which the number is being converted[a]

Data is not a numeric-literal[b]

Data



Undefined



Undefined

Size of the C data type


Undefined



Undefined

n/a



22003



22018

SQL_C_BIT Data is 0 or 1

Data is greater than 0, less than 2, and not equal to 1

Data is less than 0 or greater than or equal to 2

Data is not a numeric-literal

Data

Truncated data

Undefined

Undefined

1[b]

1[b]

Undefined

Undefined

n/a

01S07

22003

22018

SQL_C_BINARY Byte length of data <= BufferLength

Byte length of data > BufferLength

Data

Truncated data

Length of data in bytes

Length of data

n/a

01004

SQL_C_TYPE_DATE Data value is a valid date-value[a]

Data value is a valid timestamp-value; time portion is zero[a]

Data value is a valid timestamp-value; time portion is nonzero[a],[c]

Data value is not a valid date-value or timestamp-value[a]

Data

Data


Truncated data


Undefined

6[b]

6[b]


6[b]


Undefined

n/a

n/a


01S07


22018

SQL_C_TYPE_TIME Data value is a valid time-value and the fractional seconds value is 0[a]

Data value is a valid timestamp-value or a valid time-value; fractional seconds portion is zero[a],[d]

Data value is a valid timestamp-value; fractional seconds portion is nonzero[a],[d],[e]

Data value is not a valid time-value or timestamp-value[a]

Data


Data




Truncated data



Undefined

6[b]


6[b]




6[b]



Undefined

n/a


n/a




01S07



22018

SQL_C_TYPE_TIMESTAMP Data value is a valid timestamp-value or a valid time-value; fractional seconds portion not truncated[a]

Data value is a valid timestamp-value or a valid time-value; fractional seconds portion truncated[a]

Data value is a valid date-value[a]

Data value is a valid time-value[a]

Data value is not a valid date-value, time-value, or timestamp-value[a]

Data




Truncated data



Data[f]

Data[g]

Undefined

16[b]




16[b]



16[b]

16[b]

Undefined

n/a




01S07



n/a

n/a

22018

All C interval types Data value is a valid interval value; no truncation

Data value is a valid interval value; truncation of one or more trailing fields

Data is valid interval; leading field significant precision is lost

The data value is not a valid interval value

Data

Truncated data


Undefined


Undefined

Length of data in bytes

Length of data in bytes

Undefined


Undefined

n/a

01S07


22015


22018


[a]   The value of BufferLength is ignored for this conversion. The driver assumes that the size of
*TargetValuePtr is the size of the C data type.

[b]   This is the size of the corresponding C data type.

[c]   The time portion of the timestamp-value is truncated.

[d]   The date portion of the timestamp-value is ignored.

[e]   The fractional seconds portion of the timestamp is truncated.

[f]   The time fields of the timestamp structure are set to zero.

[g]   The date fields of the timestamp structure are set to the current date.

When character SQL data is converted to numeric, date, time, timestamp, or interval C data, leading and trailing spaces are ignored.