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


SQLGetData

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

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 больших определяемых пользователем типов (UDT) в среде 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