Сопоставление типов данных (ODBC)

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics AnalyticsPlatform System (PDW)

Драйвер ODBC собственного клиента SQL Server сопоставляет типы данных SQL Server с типами данных ODBC SQL. В следующих разделах рассматриваются типы данных SQL Server и типы данных SQL ODBC, с которыми они сопоставляются. В разделах также обсуждаются типы данных ODBC SQL и соответствующие им типы данных ODBC C, а также поддерживаемые преобразования и преобразования по умолчанию.

Примечание.

Тип данных метки времени SQL Serverсопоставляется с типом данных ODBC SQL_BINARY или SQL_VARBINARY, так как значения в столбцах меток времени не являются значениями datetime, а двоичными(8) или varbinary(8) значениями, указывающими последовательность действий SQL Server в строке. Если драйвер ODBC собственного клиента SQL Server встречает значение SQL_C_WCHAR (Юникод), которое является нечетным числом байтов, то конечный нечетный байт усечен.

Работа с типом данных sql_variant в ODBC

Столбец типа данных sql_variant может содержать любой из типов данных в SQL Server, кроме больших объектов (LOOB), таких как текст, ntext и изображение. Например, столбец может содержать небольшие значения для некоторых строк, значений с плавающей запятой для других строк и значений char/nchar в оставшейся строке.

Тип данных sql_variant аналогичен типу данных Variant в Visual Basic.

Получение данных с сервера

ODBC не имеет понятия о типах вариантов, ограничивающих использование типа данных sql_variant с драйвером ODBC в SQL Server. В SQL Server, если задана привязка, sql_variant тип данных должен быть привязан к одному из документированных типов данных ODBC. SQL_CA_SS_VARIANT_TYPE, новый атрибут, характерный для драйвера ODBC собственного клиента SQL Server, возвращает тип данных экземпляра в столбце sql_variant пользователю.

Если привязка не указана, функция SQLGetData может использоваться для определения типа данных экземпляра в столбце sql_variant .

Чтобы получить sql_variant данные, выполните следующие действия.

  1. Вызовите SQLFetch , чтобы разместить полученную строку.

  2. Вызовите SQLGetData, указав SQL_C_BINARY для типа и 0 для длины данных. Это заставляет драйвер считывать заголовок sql_variant . Заголовок предоставляет тип данных этого экземпляра в столбце sql_variant . SQLGetData возвращает размер (в байтах) значения.

  3. Вызовите SQLColAttribute , указав SQL_CA_SS_VARIANT_TYPE в качестве значения атрибута. Эта функция вернет тип данных C экземпляра в столбце sql_variant клиенту.

Фрагмент кода, демонстрирующий вышеуказанные шаги:

while ((retcode = SQLFetch (hstmt))==SQL_SUCCESS)  
{  
    if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)  
    {  
        SQLError (NULL, NULL, hstmt, NULL,   
                    &lNativeError,szError,MAX_DATA,&sReturned);  
        printf_s ("%s\n",szError);  
        goto Exit;  
    }  
    retcode = SQLGetData (hstmt, 1, SQL_C_BINARY,   
                                pBuff,0,&Indicator);//Figure out the length  
    if (retcode != SQL_SUCCESS_WITH_INFO && retcode != SQL_SUCCESS)  
    {  
        SQLError (NULL, NULL, hstmt, NULL, &lNativeError,   
                    szError,MAX_DATA,&sReturned);  
        printf_s ("%s\n",szError);  
        goto Exit;  
    }  
    printf_s ("Byte length : %d ",Indicator); //Print out the byte length  
  
    int iValue = 0;  
    retcode = SQLColAttribute (hstmt, 1, SQL_CA_SS_VARIANT_TYPE, NULL,   
                                        NULL,NULL,&iValue);  //Figure out the type  
    printf_s ("Sub type = %d ",iValue);//Print the type, the return is C_type of the column]  
  
// Set up a new binding or do the SQLGetData on that column with   
// the appropriate type  
}  

Если пользователь создает привязку с помощью SQLBindCol, драйвер считывает метаданные и данные. Затем драйвер преобразует данные к соответствующему типу ODBC, указанному в привязке.

Отправка данных на сервер

SQL_SS_VARIANT новый тип данных, характерный для драйвера ODBC собственного клиента SQL Server, используется для данных, отправляемых в столбец sql_variant. При отправке данных на сервер с помощью параметров (например, INSERT INTO TableName VALUES (?,?)), SQLBindParameter используется для указания сведений о параметрах, включая тип C и соответствующий тип SQL Server. Драйвер ODBC собственного клиента SQL Server преобразует тип данных C в один из соответствующих подтипов sql_variant .

См. также

Обработка результатов (ODBC)