SQLGetData

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

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

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

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

Замечание

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

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

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

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

Поддержка SQLGetData для больших определяемых пользователем пользователей среды CLR

SQLGetData поддерживает большие определяемые пользователем типы CLR (определяемые пользователем UDT). Дополнительные сведения см. в разделе "Крупные определяемые пользователем типы 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.  
        }  
    }  

См. также

Функция SQLGetData
Подробные сведения о реализации API-интерфейсов ODBC