Преобразование данных из C в типы данных SQL
Когда приложение вызывает SQLExecute или SQLExecDirect, драйвер извлекает данные для любых параметров, привязанных к SQLBindParameter , из расположений хранения в приложении. Когда приложение вызывает SQLSetPos, драйвер извлекает данные для операции обновления или добавления из столбцов, привязанных к SQLBindCol. Для параметров выполнения приложение отправляет данные параметров с помощью SQLPutData. При необходимости драйвер преобразует данные из типа данных, указанного аргументом ValueType в SQLBindParameter, в тип данных, указанный аргументом ParameterType в SQLBindParameter, а затем отправляет данные в источник данных.
В следующей таблице показаны поддерживаемые преобразования типов данных ODBC C в типы данных ODBC SQL. Заполненный круг указывает преобразование по умолчанию для типа данных SQL (тип данных C, из которого данные будут преобразованы, если значение ValueType или поле дескриптора SQL_DESC_CONCISE_TYPE SQL_C_DEFAULT). Полый круг указывает на поддерживаемое преобразование.
Формат преобразованных данных не влияет на страну или регион Windows.
В таблицах в следующих разделах описывается, как драйвер или источник данных преобразует данные, отправленные в источник данных; драйверы необходимы для поддержки преобразований всех типов данных ODBC C в типы данных ODBC SQL, которые они поддерживают. Для заданного типа данных ODBC C первый столбец таблицы содержит юридические входные значения аргумента ParameterType в SQLBindParameter. Второй столбец содержит результаты теста, выполняемого драйвером, чтобы определить, может ли он преобразовать данные. Третий столбец содержит список SQLSTATE, возвращаемых для каждого результата SQLExecDirect, SQLExecute, SQLBulkOperations, SQLSetPos или SQLPutData. Данные отправляются в источник данных только в том случае, если возвращается SQL_SUCCESS.
Если аргумент ParameterType в SQLBindParameter содержит идентификатор типа данных ODBC SQL, который не отображается в таблице для заданного типа данных C, SQLBindParameter возвращает SQLSTATE 07006 (нарушение атрибута ограниченного типа данных). Если аргумент ParameterType содержит идентификатор драйвера, и драйвер не поддерживает преобразование из определенного типа данных ODBC C в этот тип данных SQL для конкретного драйвера, SQLBindParameter возвращает SQLSTATE HYC00 (необязательная функция не реализована).
Если аргументы ParameterValuePtr и StrLen_or_IndPtr, указанные в SQLBindParameter, являются указателями NULL, эта функция возвращает SQLSTATE HY009 (недопустимое использование указателя NULL). Хотя оно не отображается в таблицах, приложение задает значение буфера длины или индикатора, на который указывает аргумент StrLen_or_IndPtr SQLBindParameter или значение аргумента StrLen_or_IndPtr SQLPutData, чтобы SQL_NULL_DATA указать значение данных NULL SQL. (The аргумент StrLen_or_IndPtr соответствует полю SQL_DESC_OCTET_LENGTH_PTR APD.) Приложение задает эти значения SQL_NTS, чтобы указать, что значение в *ParameterValuePtr в SQLBindParameter или *DataPtr в SQLPutData (указывает на поле SQL_DESC_DATA_PTR APD) является строкой, завершающейся null.
В таблицах используются следующие термины:
Длина байтов данных — количество байтов данных SQL, доступных для отправки в источник данных, независимо от того, будут ли данные усечены до отправки в источник данных. Для строковых данных это не включает пробел для символа завершения null.
Длина байтов столбца — количество байтов, необходимых для хранения данных в источнике данных.
Длина байтов символов — максимальное количество байтов, необходимых для отображения данных в символьной форме. Это определяется для каждого типа данных SQL в размере отображения, за исключением длины байтов символов в байтах, а размер дисплея находится в символах.
Число цифр — число символов , используемых для представления числа, включая знак минуса, десятичную точку и экспонент (при необходимости).
Слова в
курсив — элементы грамматики SQL. Синтаксис элементов грамматики см . в приложении C: Грамматика SQL.
Этот раздел содержит следующие подразделы.