다음을 통해 공유


SQLGetData

적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)

SQLGetData 는 열 값을 바인딩하지 않고 결과 집합 데이터를 검색하는 데 사용됩니다. 동일한 열에서 SQLGetData를 연속적으로 호출하여 텍스트, ntext 또는 이미지 데이터 형식이 있는 열에서 대량의 데이터를 검색할 수 있습니다.

애플리케이션이 결과 집합 데이터를 인출하기 위해 변수를 바인딩해야 하는 요구 사항은 없습니다. SQLGetData를 사용하여 SQL Server Native Client ODBC 드라이버에서 모든 열의 데이터를 검색할 수 있습니다.

SQL Server Native Client ODBC 드라이버는 SQLGetData를 사용하여 임의 열 순서로 데이터를 검색하는 것을 지원하지 않습니다. SQLGetData처리된 모든 언바운드 열에는 결과 집합의 바인딩된 열보다 높은 열 서수가 있어야 합니다. 애플리케이션은 바인딩되지 않은 가장 낮은 서수 열 값에서 가장 높은 서수 열 값으로 데이터를 처리해야 합니다. 하위 서수로 번호가 매겨진 열에서 데이터를 검색하려고 시도하면 오류가 발생합니다. 애플리케이션에서 서버 커서를 사용하여 결과 집합 행을 보고하는 경우 애플리케이션은 현재 행을 다시 페치한 다음 열 값을 가져올 수 있습니다. 문이 기본 읽기 전용 정방향 전용 커서에서 실행되는 경우 문을 다시 실행하여 SQLGetData를 백업해야 합니다.

SQL Server Native Client ODBC 드라이버는 SQLGetData를 사용하여 검색된 텍스트, ntext이미지 데이터의 길이를 정확하게 보고합니다. 애플리케이션은 StrLen_or_IndPtr 매개 변수 반환을 잘 사용하여 긴 데이터를 신속하게 검색할 수 있습니다.

참고 항목

큰 값 형식에 대해 StrLen_or_IndPtr 은 데이터 잘림이 발생할 경우 SQL_NO_TOTAL을 반환합니다.

향상된 날짜 및 시간 기능에 대한 SQLGetData 지원

날짜/시간 형식의 결과 열 값은 SQL에서 C로의 변환에 설명된 대로 변환됩니다.

자세한 내용은 날짜 및 시간 개선 사항(ODBC)을 참조하세요.

큰 CLR UDT에 대한 SQLGetData 지원

SQLGetData 는 큰 CLR UDT(사용자 정의 형식)를 지원합니다. 자세한 내용은 ODBC(큰 CLR 사용자 정의 형식)를 참조하세요.

예시

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 함수
ODBC API 구현 정보