Как преобразовать данные из SQL в типы данных C?

Опубликовано: 7 Января, 2023

В момент, когда приложение вызывает SQLExecute или SQLExecDirect, драйвер восстанавливает данные для любых границ, связанных с SQLBindParameter, из областей емкости в приложении. В момент, когда приложение вызывает SQLSetPos, драйвер восстанавливает данные для обновления или добавляет активность из разделов, связанных с SQLBindCol. Для границ данных при выполнении приложение отправляет граничные данные с помощью SQLPutData. Если это важно, драйвер меняет тип данных с типа данных, определенного состязанием ValueType в SQLBindParameter, на тип данных, определенный состязанием ParameterType в SQLBindParameter, а затем в этот момент отправляет данные в источник данных.

Поддерживаемые преобразования между типами данных ODBC SQL и типами данных ODBC C записываются в таблице ниже. Преобразование по умолчанию для типа данных SQL (тип данных C, в который данные будут преобразованы, когда значение TargetType равно SQL C DEFAULT) обозначено закрашенным кружком. Пустой кружок означает, что преобразование прошло успешно. Преобразование из конфигураций данных, специфичных для драйвера, вероятно, не будет поддерживаться для приложения ODBC 3x, использующего драйвер ODBC 2x.

Конфигурация преобразованных данных не зависит от настроек Windows.

ТИП ДАННЫХ SQL

C ТИП ДАННЫХ

SQL_CHAR

SQL_VARCHAR

SQL_LONGVARCHAR

SQL_WCHAR

SQL_WVARCHAR

SQL_WLONGVARCHAR

SQL_DECIMAL

SQL_NUMERIC

SQL_BIT

SQL_TINY INT(подписанный

SQL_TINYINT (без знака)

SQL_SMALL INT (подписано)

SQL_SMALLINT (без знака)

SQL_INTEGER(подписано)

SQL_INTEGER(без знака)

SQL_BIG INT (подписано)

SQL_BIG INT (без знака)

SQL_REAL

SQL_FLOAT

SQL_C_CHAR

oSQL_C_WCHAR

SQL_C_BIT

SQL_C_NUMERIC

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_FLOAT

SQL_C_DOUBLE

SQL_C_BINARY

SQL_C_TYPE_DATE

SQL_C_TYPE_TIME

SQL_C_TYPE_TIMESTAMP

INTERVAL_C(ДАТА-ВРЕМЯ)

INTERVAL_C(ГОД-МЕСЯЦ)

SQL_C_GUID

ТИП ДАННЫХ SQL и ТИП ДАННЫХ C SQL_DOUBLE SQL_BINARY SQL_VARBINARY SQL_LONGVARBINARY SQL_TYPE_DATE SQL_TYPE_TIME SQL_TYPE_TIMESTAMP INTERVAL_SQL(ДАТА-ВРЕМЯ) INTERVAL_SQL(ГОД-МЕСЯЦ) SQL_GUID
SQL_C_CHAR

oSQL_C_WCHAR

SQL_C_BIT

SQL_C_NUMERIC

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_FLOAT

SQL_C_DOUBLE

SQL_C_BINARY

SQL_C_TYPE_DATE

SQL_C_TYPE_TIME

SQL_C_TYPE_TIMESTAMP

INTERVAL_C(ДАТА-ВРЕМЯ)

INTERVAL_C(ГОД-МЕСЯЦ)

SQL_C_GUID

Таблицы в сопровождающих разделах описывают, как драйвер или источник данных преобразует данные, отправленные из источника данных; Ожидается, что драйверы помогут преобразовать все типы данных ODBC C в типы данных ODBC SQL, которые они поддерживают. Для заданного типа данных ODBC C в основном столбце таблицы записываются достоверные сведения о преимуществах конкуренции типа границы в SQLBindParameter. Во втором столбце записываются результаты теста, который драйвер выполняет, чтобы решить, может ли он преобразовать данные. В третьем столбце записывается SQLSTATE, возвращаемый для каждого результата SQLExecDirect, SQLExecute, SQLBulkOperations, SQLSetPos или SQLPutData. Данные отправляются из источника данных при условии, что возвращается SQL_SUCCESS.

Предполагая, что конфликт ParameterType в SQLBindParameter содержит идентификатор типа данных ODBC SQL, который не отображается в этом настроении для данного типа данных C, SQLBindParameter возвращает SQLSTATE 07006 (нарушение свойства ограниченного типа данных). Если конфликт типа границы содержит идентификатор, специфичный для драйвера, и драйвер не поддерживает преобразование из определенного типа данных ODBC C в этот тип данных SQL, специфичный для драйвера, SQLBindParameter возвращает SQLSTATE HYC00 (дискреционный элемент не выполнен). .

Предполагая, что конфликты ParameterValuePtr и StrLen_or_IndPtr, указанные в SQLBindParameter, являются недопустимыми указателями, эта функция возвращает SQLSTATE HY009 (недопустимое использование недопустимого указателя). Хотя это не отображается в таблицах, приложение устанавливает значение подушки длины/индикатора, выделенной состязанием StrLen_or_IndPtr SQLBindParameter, или значением состязания StrLen_or_IndPtr SQLPutData, равным SQL_NULL_DATA, чтобы указать оценку недопустимых данных SQL. (Конфликт StrLen_or_IndPtr соответствует полю SQL_DESC_OCTET_LENGTH_PTR в APD.) Приложение устанавливает эти качества в SQL_NTS, чтобы указать, что значение в *ParameterValuePtr в SQLBindParameter или *DataPtr в SQLPutData (выделено полем SQL_DESC_DATA_PTR в APD) является недопустимым окончанием. нить.

Сопутствующие термины используются в таблицах:

  1. Длина данных в байтах — количество байтов данных SQL, доступных для отправки из источника данных, независимо от того, будут ли данные усечены перед отправкой из источника данных. Для строковых данных это не включает пробел для недопустимого конечного символа.
  2. Длина столбца в байтах — ожидаемое количество байтов для хранения данных в источнике данных.
  3. Длина символьного байта — максимальное количество байтов, которое, как ожидается, будет отображать данные в символьной структуре. Это характерно для каждого типа данных SQL в разделе «Показать размер», за исключением того, что длина символьного байта указывается в байтах, а размер представления — в символах.
  4. Количество цифр — количество символов, используемых для адресации числа, включая знак «меньше», десятичную точку и пример (при необходимости).