Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйвер ODBC для собственного клиента SQL Server сопоставляет типы данных SQL Server SQL и типы данных ODBC SQL. В последующих разделах обсуждаются типы данных SQL Server SQL с типами данных ODBC SQL, с которыми они сопоставляются. В разделах также обсуждаются типы данных ODBC SQL и соответствующие им типы данных ODBC C, а также поддерживаемые преобразования и преобразования по умолчанию.
Примечание |
|---|
Тип данных SQL Server timestamp сопоставим с типом данных ODBC SQL_BINARY или SQL_VARBINARY, так как значения в столбцах timestamp не являются значениями типа datetime, а значениями типа binary(8) или varbinary(8), которые показывают последовательность операций SQL Server для строки. Если драйвер ODBC для собственного клиента SQL Server встречает значение типа SQL_C_WCHAR (Юникод), что означает нечетное число байт, то последний нечетный байт усекается. |
Работа с типом данных sql_variant в ODBC
Столбец типа sql_variant может содержать любые типы данных SQL Server, кроме типов больших объектов, таких как text, ntext и image. Например, столбец может содержать для некоторых строк значения типа smallint, для других строк значения типа float и для оставшихся строк значения типа char/nchar.
Тип sql_variant подобен типу данных Variant в Microsoft Visual Basic®.
Получение данных с сервера
В ODBC отсутствует понятие типа variant, что ограничивает использование типа 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, выполните следующие шаги.
Вызовите функцию SQLFetch, чтобы перейти к получаемой строке.
Вызовите функцию SQLGetData, указав тип SQL_C_BINARY и длину данных 0. Это заставит драйвер считать заголовок sql_variant. Заголовок предоставляет тип данных этого экземпляра в столбце sql_variant . Функция SQLGetData возвращает размер значения (в байтах).
Вызовите функцию 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 имя_таблицы VALUES (?,?)), функция SQLBindParameter используется, чтобы задать сведения о параметре, в том числе тип C и соответствующий тип SQL Server. Драйвер ODBC для собственного клиента SQL Server преобразует тип C в один из соответствующих подтипов sql_variant.
Примечание