Поделиться через


SQLGetData

Метод SQLGetData используется для получения данных набора результатов без привязки значений столбцов. Метод SQLGetData можно вызывать повторно для одного и того же столбца, если нужно передать большие объемы данных из столбца с типом данных text, ntext или image.

Приложение не обязано выполнять привязку данных для получения данных набора результатов. Данные любого столбца могут быть получены от ODBC-драйвера для собственного клиента SQL Server с помощью функции SQLGetData.

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

Драйвер ODBC собственного клиента SQL Server сообщает точную длину данных типа text, ntext и image, полученных с помощью функции SQLGetData. Приложение может пользоваться параметром StrLen_or_IndPtr для быстрого возврата длинных данных.

ПримечаниеПримечание

Для типов с большими значениями параметр StrLen_or_IndPtr при усечении данных вернет значение SQL_NO_TOTAL.

Поддержка методом SQLGetData усовершенствованных функций даты-времени

Значения результирующих столбцов типов даты-времени преобразуются по правилам, описанным в разделе Преобразования из SQL в C.

Дополнительные сведения см. в разделе Улучшенная обработка даты и времени (ODBC).

Поддержка методом SQLGetData больших пользовательских типов (UDT) в среде CLR

Метод SQLGetData поддерживает большие определяемые пользователем типы (UDT) в среде CLR. Дополнительные сведения см. в разделе Определяемые пользователем типы данных больших значений CLR (ODBC).

Примеры

SQLHDBC     hDbc = NULL;SQLHSTMT    hStmt = NULL;long        lEmpID;PBYTE       pPicture;SQLINTEGER  pIndicators[2];// Get an environment, connection, and so on....// Get a statement handle and execute a command.SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);if (SQLExecDirect(hStmt,    (SQLCHAR*) "SELECT EmployeeID, Photo FROM Employees",    SQL_NTS) == SQL_ERROR)    {    // Handle error and return.    }// Retrieve data from row set.SQLBindCol(hStmt, 1, SQL_C_LONG, (SQLPOINTER) &lEmpID, sizeof(long),    &pIndicators[0]);while (SQLFetch(hStmt) == SQL_SUCCESS)    {    cout << "EmployeeID: " << lEmpID << "\n";    // Call SQLGetData to determine the amount of data that's waiting.    if (SQLGetData(hStmt, 2, SQL_C_BINARY, pPicture, 0, &pIndicators[1])        == SQL_SUCCESS_WITH_INFO)        {        cout << "Photo size: " pIndicators[1] << "\n\n";        // Get all the data at once.        pPicture = new BYTE[pIndicators[1]];        if (SQLGetData(hStmt, 2, SQL_C_DEFAULT, pPicture,            pIndicators[1], &pIndicators[1]) != SQL_SUCCESS)            {            // Handle error and continue.            }        delete [] pPicture;        }    else        {        // Handle error on attempt to get data length.        }    }

См. также

Основные понятия

Другие ресурсы