다음을 통해 공유


긴 데이터 보내기

DBMSs는 254자 같은 특정 크기에 걸쳐 긴 데이터를 문자 또는 이진 데이터로 정의합니다. 항목이 긴 텍스트 문서 또는 비트맵을 나타내는 경우와 같이 긴 데이터의 전체 항목을 메모리에 저장할 수 없습니다. 이러한 데이터는 단일 버퍼에 저장할 수 없으므로 문이 실행될 때 데이터 원본은 SQLPutData를 사용하여 드라이버로 보냅니다. 실행 시 데이터가 전송되는 매개 변수를 실행 시 데이터 매개 변수라고 합니다.

참고 항목

문자 및 이진 데이터만 파트로 보낼 수 있지만 애플리케이션은 SQLPutData사용하여 실행 시 모든 형식의 데이터를 실제로 보낼 수 있습니다. 그러나 데이터가 단일 버퍼에 맞게 충분히 작은 경우 일반적으로 SQLPutData를 사용할 이유가 없습니다. 버퍼를 바인딩하고 드라이버가 버퍼에서 데이터를 검색하도록 하는 것이 훨씬 쉽습니다.

실행 시 데이터를 보내기 위해 애플리케이션은 다음 작업을 수행합니다.

  1. 버퍼의 주소를 전달하는 대신 SQLBindParameter의 ParameterValuePtr 인수에서 매개 변수를 식별하는 32비트 값을 전달 합니다. 이 값은 드라이버에서 분석되지 않습니다. 나중에 애플리케이션에 반환되므로 애플리케이션에 무언가를 의미해야 합니다. 예를 들어 매개 변수의 수 또는 데이터가 포함된 파일의 핸들일 수 있습니다.

  2. SQLBindParameter의 StrLen_or_IndPtr 인수에 길이/표시기 버퍼의 주소를 전달합니다.

  3. SQL_DATA_AT_EXEC 또는 SQL_LEN_DATA_AT_EXEC(length) 매크로의 결과를 길이/표시기 버퍼에 저장합니다. 이러한 두 값은 모두 매개 변수의 데이터가 SQLPutData와 함께 전송된다는 것을 드라이버에 나타냅니다. SQL_LEN_DATA_AT_EXEC(길이)는 긴 데이터를 데이터 원본에 보낼 때 사용되며, 이 경우 공간을 미리 할당할 수 있도록 전송할 긴 데이터의 바이트 수를 알아야 합니다. 데이터 원본에 이 값이 필요한지 확인하기 위해 애플리케이션은 SQL_NEED_LONG_DATA_LEN 옵션을 사용하여 SQLGetInfo를 호출합니다. 모든 드라이버는 이 매크로를 지원해야 합니다. 데이터 원본에 바이트 길이가 필요하지 않으면 드라이버는 이를 무시할 수 있습니다.

  4. SQLExecute 또는 SQLExecDirect를 호출합니다. 드라이버는 길이/표시기 버퍼에 SQL_DATA_AT_EXEC 값 또는 SQL_LEN_DATA_AT_EXEC(length) 매크로의 결과가 포함되어 있음을 검색하고 함수의 반환 값으로 SQL_NEED_DATA 반환합니다.

  5. SQL_NEED_DATA 반환 값에 대한 응답으로 SQLParamData를 호출합니다. 긴 데이터를 보내야 하는 경우 SQLParamDataSQL_NEED_DATA 반환합니다. ValuePtrPtr 인수가 가리키는 버퍼에서 드라이버는 실행 시 데이터 매개 변수를 식별하는 값을 반환합니다. 실행 시 데이터 매개 변수가 두 개 이상 있는 경우 애플리케이션은 이 값을 사용하여 데이터를 보낼 매개 변수를 결정해야 합니다. 드라이버는 특정 순서로 실행 시 데이터 매개 변수에 대한 데이터를 요청할 필요가 없습니다.

  6. SQLPutData를 호출하여 드라이버에 매개 변수 데이터를 보냅니다. 매개 변수 데이터가 단일 버퍼에 맞지 않는 경우 긴 데이터가 있는 경우처럼 애플리케이션은 SQLPutData를 반복적으로 호출하여 데이터를 파트로 보냅니다. 데이터를 다시 어셈블하는 것은 드라이버와 데이터 원본에 달려 있습니다. 애플리케이션이 null로 종료된 문자열 데이터를 전달하는 경우 드라이버 또는 데이터 원본은 리어셈블리 프로세스의 일부로 null 종료 문자를 제거해야 합니다.

  7. SQLParamData를 다시 호출하여 매개 변수에 대한 모든 데이터를 보냈음을 나타냅니다. 데이터가 전송되지 않은 실행 시 데이터 매개 변수가 있는 경우 드라이버는 SQL_NEED_DATA 다음 매개 변수를 식별하는 값을 반환합니다. 애플리케이션이 6단계로 돌아갑니다. 모든 실행 시 데이터 매개 변수에 대한 데이터를 보낸 경우 문이 실행됩니다. SQLParamData는 SQL_SUCCESS 또는 SQL_SUCCESS_WITH_INFO 반환하며 SQLExecute 또는 SQLExecDirect에서 반환할 수 있는 반환 값 또는 진단을 반환할 수 있습니다.

SQLExecute 또는 SQLExecDirect가 SQL_NEED_DATA 반환하고 마지막 실행 시 데이터 매개 변수에 대해 데이터가 완전히 전송되기 전에 문이 데이터 필요 상태에 있습니다. 문이 데이터 필요 상태인 동안 애플리케이션은 SQLPutData, SQLParamData, SQLCancel, SQLGetDiagField 또는 SQLGetDiagRec호출할 수 있습니다. 다른 모든 함수는 SQLSTATE HY010(함수 시퀀스 오류)을 반환합니다. SQLCancel을 호출하면 문 실행이 취소되고 이전 상태로 반환됩니다. 자세한 내용은 부록 B: ODBC 상태 전환 테이블을 참조 하세요.

실행 시 데이터를 보내는 예제는 SQLPutData 함수 설명을 참조하세요.