Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
SQLGetData используется для получения данных результирующих наборов без привязки значений столбцов. SqlGetData можно вызывать последовательно в одном столбце для получения больших объемов данных из столбца с типом данных text, ntext или image .
В приложении не обязательно выполнять привязку данных для получения данных результирующего набора. Данные любого столбца можно получить из драйвера ODBC SQL Server Native Client с помощью SQLGetData.
Драйвер ODBC SQL Server Native Client не поддерживает использование SQLGetData для извлечения данных в случайном порядке столбцов. Все несвязанные столбцы, обрабатываемые с помощью SQLGetData , должны иметь более высокие порядковые номера столбцов, чем связанные столбцы в результирующем наборе. Приложение обрабатывает данные непривязанных столбцов (начиная со столбца с наименьшим порядковым номером и заканчивая столбцом с наибольшим порядковым номером). Попытка получить данные из столбца с более низким порядковым номером приведет к ошибке. Если в приложении используются серверные курсоры для формирования сообщений о строках результирующего набора, то приложение может повторно получить текущую строку, а затем получить значение столбца. Если инструкция выполняется на курсоре, доступном только для чтения и пересылки по умолчанию, необходимо повторно выполнить инструкцию для резервного копирования SQLGetData.
Драйвер ODBC SQL Server Native Client точно сообщает длину данных text, ntext и image, полученных с помощью SQLGetData. Приложение может использовать возвращаемый параметр StrLen_or_IndPtr для быстрого получения длинных данных.
Примечание
Для типов больших значений StrLen_or_IndPtr будет возвращать SQL_NO_TOTAL в случаях усечения данных.
Поддержка методом SQLGetData улучшенных функций даты и времени
Значения столбцов результатов типов даты и времени преобразуются, как описано в разделе Преобразования из SQL в C.
Дополнительные сведения см. в разделе Улучшения даты и времени (ODBC).
Поддержка методом SQLGetData больших определяемых пользователем типов (UDT) в среде CLR
SQLGetData поддерживает большие определяемые пользователем типы (UT) среды CLR. Дополнительные сведения см. в статье Типы больших User-Defined среды 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.
}
}