다음을 통해 공유


SQLBindParameter 함수

규칙
버전 소개: ODBC 2.0 표준 준수: ODBC

요약
SQLBindParameter 는 SQL 문의 매개 변수 표식에 버퍼를 바인딩합니다. SQLBindParameter 는 기본 드라이버가 유니코드 데이터를 지원하지 않는 경우에도 유니코드 C 데이터 형식에 대한 바인딩을 지원합니다.

참고 항목

이 함수는 ODBC 1.0 함수 SQLSetParam을 대체합니다. 자세한 내용은 "설명"을 참조하세요.

구문

  
SQLRETURN SQLBindParameter(  
      SQLHSTMT        StatementHandle,  
      SQLUSMALLINT    ParameterNumber,  
      SQLSMALLINT     InputOutputType,  
      SQLSMALLINT     ValueType,  
      SQLSMALLINT     ParameterType,  
      SQLULEN         ColumnSize,  
      SQLSMALLINT     DecimalDigits,  
      SQLPOINTER      ParameterValuePtr,  
      SQLLEN          BufferLength,  
      SQLLEN *        StrLen_or_IndPtr);  

인수

StatementHandle
[입력] 문 핸들입니다.

ParameterNumber
[입력] 1부터 시작하여 증가하는 매개 변수 순서로 순차적으로 정렬된 매개 변수 번호입니다.

InputOutputType
[입력] 매개 변수의 형식입니다. 자세한 내용은 "Comments"의 "InputOutputType 인수"를 참조하세요.

ValueType
[입력] 매개 변수의 C 데이터 형식입니다. 자세한 내용은 "Comments"의 "ValueType 인수"를 참조하세요.

ParameterType
[입력] 매개 변수의 SQL 데이터 형식입니다. 자세한 내용은 "Comments"의 "ParameterType 인수"를 참조하세요.

ColumnSize
[입력] 해당 매개 변수 표식의 열 또는 식 크기입니다. 자세한 내용은 "Comments"에서 "ColumnSize 인수"를 참조하세요.

애플리케이션이 64비트 Windows 운영 체제에서 실행되는 경우 ODBC 64비트 정보를 참조하세요.

DecimalDigits
[입력] 해당 매개 변수 표식의 열 또는 식의 소수 자릿수입니다. 열 크기에 대한 자세한 내용은 열 크기, 10진수, 8진수 길이 전송 및 표시 크기를 참조 하세요.

ParameterValuePtr
[지연된 입력] 매개 변수 데이터의 버퍼에 대한 포인터입니다. 자세한 내용은 "Comments"에서 "ParameterValuePtr 인수"를 참조하세요.

BufferLength
[입/출력] ParameterValuePtr 버퍼의 길이(바이트)입니다. 자세한 내용은 "Comments"에서 "BufferLength 인수"를 참조하세요.

애플리케이션이 64비트 운영 체제에서 실행되는 경우 ODBC 64비트 정보를 참조하세요.

StrLen_or_IndPtr
[지연된 입력] 매개 변수 길이에 대한 버퍼에 대한 포인터입니다. 자세한 내용은 "주석"의 "StrLen_or_IndPtr 인수"를 참조하세요.

반품

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR 또는 SQL_INVALID_HANDLE.

진단

SQLBindParameter가 SQL_ERROR 또는 SQL_SUCCESS_WITH_INFO 반환하는 경우 SQL_HANDLE_STMT HandleType Handle of StatementHandle을 사용하여 SQLGetDiagRec 를 호출하여 관련 SQLSTATE 값을 가져올 수 있습니다. 다음 표에서는 일반적으로 SQLBindParameter에서 반환되는 SQLSTATE 값을 나열하고 이 함수의 컨텍스트에서 각 값을 설명합니다. 표기법 "(DM)"은 드라이버 관리자가 반환한 SQLSTATE에 대한 설명 앞에 나와 있습니다. 달리 명시되지 않는 한 각 SQLSTATE 값과 연결된 반환 코드는 SQL_ERROR.

SQLSTATE 오류 설명
01000 일반 경고 드라이버 관련 정보 메시지입니다. 함수는 SQL_SUCCESS_WITH_INFO 반환합니다.
07006 제한된 데이터 형식 특성 위반 ValueType 인수로 식별되는 데이터 형식은 ParameterType 인수로 식별되는 데이터 형식으로 변환할 수 없습니다. 이 오류는 SQLBindParameter 대신 실행 시 SQLExecDirect, SQLExecute 또는 SQLPutData에서 반환될 수 있습니다.
07009 설명자 인덱스가 잘못되었습니다. (DM) ParameterNumber 인수에 지정된 값이 1보다 작습니다.
HY000 일반 오류 특정 SQLSTATE가 없고 구현별 SQLSTATE가 정의되지 않은 오류가 발생했습니다. *MessageText 버퍼의 SQLGetDiagRec에서 반환된 오류 메시지는 오류와 그 원인을 설명합니다.
HY001 메모리 할당 오류 드라이버가 함수 실행 또는 완료를 지원하는 데 필요한 메모리를 할당할 수 없습니다.
HY003 잘못된 애플리케이션 버퍼 유형 ValueType 인수에 지정된 값이 유효한 C 데이터 형식이 아니거나 SQL_C_DEFAULT.
HY004 잘못된 SQL 데이터 형식 ParameterType 인수에 지정된 값은 유효한 ODBC SQL 데이터 형식 식별자나 드라이버에서 지원하는 드라이버별 SQL 데이터 형식 식별자가 아니었습니다.
HY009 잘못된 인수 값 (DM) ParameterValuePtr 인수가 null 포인터이고, StrLen_or_IndPtr 인수가 null 포인터이고, InputOutputType 인수가 SQL_PARAM_OUTPUT 않았습니다.

(DM) SQL_PARAM_OUTPUT 여기서 ParameterValuePtr 인수는 null 포인터이고, C 형식은 char 또는 binary이고, BufferLength(cbValueMax)는 0보다 큽니다.
HY010 함수 시퀀스 오류 (DM) StatementHandle과 연결된 연결 핸들에 대해 비동기적으로 실행되는 함수가 호출되었습니다. SQLBindParameter가 호출되었을 때 이 비동기 함수는 여전히 실행 중입니다.

(DM) SQLExecute, SQLExecDirect 또는 SQLMoreResults가 StatementHandle에 대해 호출되고 SQL_PARAM_DATA_AVAILABLE 반환되었습니다. 이 함수는 모든 스트리밍된 매개 변수에 대해 데이터를 검색하기 전에 호출되었습니다.

(DM) StatementHandle에 대해 비동기적으로 실행되는 함수가 호출되었고 이 함수가 호출되었을 때에도 여전히 실행 중입니다.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations 또는 SQLSetPos가 StatementHandle에 대해 호출되고 SQL_NEED_DATA 반환되었습니다. 이 함수는 모든 실행 시 데이터 매개 변수 또는 열에 대한 데이터를 보내기 전에 호출되었습니다.
HY013 메모리 관리 오류 메모리 조건이 낮기 때문에 기본 메모리 개체에 액세스할 수 없기 때문에 함수 호출을 처리할 수 없습니다.
HY021 일관되지 않은 설명자 정보 일관성 검사 중에 확인된 설명자 정보가 일관되지 않았습니다. (의 "일관성 검사" 섹션 을 참조하세요.SQLSetDescField.)

DecimalDigits 인수에 지정된 값이 ParameterType 인수로 지정된 SQL 데이터 형식의 열에 대해 데이터 원본에서 지원하는 값 범위를 벗어났습니다.
HY090 잘못된 문자열 또는 버퍼 길이 (DM) BufferLength값이 0보다 작습니다. (에서 SQL_DESC_DATA_PTR 필드에 대한 설명을 참조하세요. SQLSetDescField.)
HY104 전체 자릿수 또는 배율 값이 잘못되었습니다. ColumnSize 또는 DecimalDigits 인수에 지정된 값이 ParameterType 인수로 지정된 SQL 데이터 형식의 열에 대해 데이터 원본에서 지원하는 값 범위를 벗어났습니다.
HY105 잘못된 매개 변수 형식 (DM) InputOutputType 인수에 지정된 값이 잘못되었습니다. ("주석"을 참조하세요.)
HY117 알 수 없는 트랜잭션 상태로 인해 연결이 일시 중단됩니다. 연결 끊기 및 읽기 전용 함수만 허용됩니다. (DM) 일시 중단 상태에 대한 자세한 내용은 SQLEndTran 함수를 참조 하세요.
HYC00 선택적 기능이 구현되지 않음 드라이버 또는 데이터 원본은 인수 ValueType에 지정된 값과 ParameterType 인수에 지정된 드라이버별 값의 조합으로 지정된 변환을 지원하지 않습니다.

ParameterType 인수에 지정된 값은 드라이버에서 지원하는 ODBC 버전에 대한 유효한 ODBC SQL 데이터 형식 식별자였지만 드라이버 또는 데이터 원본에서 지원되지 않았습니다.

드라이버는 ODBC 2만 지원합니다.x 및 ValueType 인수는 다음 중 하나입니다.

SQL_C_NUMERIC SQL_C_SBIGINT SQL_C_UBIGINT

부록 D: 데이터 형식의 C 데이터 형식나열된 모든 간격 C 데이터 형식입니다.

드라이버는 3.50 이전의 ODBC 버전만 지원하며 ValueType 인수는 SQL_C_GUID.
HYT01 연결 제한 시간이 만료됨 데이터 원본이 요청에 응답하기 전에 연결 제한 시간이 만료되었습니다. 연결 제한 시간은 SQL_ATTR_CONNECTION_TIMEOUT SQLSetConnectAttr를 통해 설정됩니다.
IM001 드라이버는 이 함수를 지원하지 않습니다. (DM) StatementHandle연결된 드라이버는 함수를 지원하지 않습니다.

설명

애플리케이션은 SQLBindParameter를 호출하여 SQL 문의 각 매개 변수 마커를 바인딩합니다. 바인딩은 애플리케이션이 SQLBindParameter를 다시 호출하거나, SQL_RESET_PARAMS 옵션을 사용하여 SQLFreeStmt를 호출하거나, SQLSetDescField를 호출하여 APD의 SQL_DESC_COUNT 헤더 필드를 0으로 설정할 때까지 계속 적용됩니다.

매개 변수에 대한 자세한 내용은 문 매개 변수를 참조 하세요. 매개 변수 데이터 형식 및 매개 변수 표식에 대한 자세한 내용은 부록 C: SQL 문법의 매개 변수 데이터 형식매개 변수 표식을 참조하세요.

ParameterNumber 인수

SQLBindParameter 호출의 ParameterNumber가 SQL_DESC_COUNT 값보다 크면 SQL_DESC_COUNT 값을 ParameterNumber로 늘리기 위해 SQLSetDescField가 호출됩니다.

InputOutputType 인수

InputOutputType 인수는 매개 변수의 형식을 지정합니다. 이 인수는 IPD의 SQL_DESC_PARAMETER_TYPE 필드를 설정합니다. INSERT 문과 같은 프로시저를 호출하지 않는 SQL 문의 모든 매개 변수는 입력 매개 변수입니다. 프로시저 호출의 매개 변수는 입력, 입력/출력 또는 출력 매개 변수일 수 있습니다. (애플리케이션 호출 프로시저 호출에서 매개 변수의 형식을 결정하는 SQLProcedureColumns , 형식을 확인할 수 없는 매개 변수는 입력 매개 변수로 간주됩니다.)

InputOutputType 인수는 다음 값 중 하나입니다.

  • SQL_PARAM_INPUT. 매개 변수는 INSERT 문과 같은 프로시저를 호출하지 않는 SQL 문에 매개 변수를 표시하거나 프로시저에서 입력 매개 변수를 표시합니다. 예를 들어 INSERT INTO Employee VALUES(?, ?, ?)의 매개 변수는 입력 매개 변수인 반면 {call AddEmp(?, ?, ?)}의 매개 변수는 입력 매개 변수일 수 있지만 반드시 입력 매개 변수는 아닙니다.

    문이 실행되면 드라이버는 매개 변수에 대한 데이터를 데이터 원본으로 보냅니다. *ParameterValuePtr 버퍼에는 유효한 입력 값이 포함되어야 합니다. 또는 *StrLen_or_IndPtr 버퍼에는 SQL_NULL_DATA, SQL_DATA_AT_EXEC 또는 SQL_LEN_DATA_AT_EXEC 매크로의 결과가 포함되어야 합니다.

    애플리케이션이 프로시저 호출에서 매개 변수의 형식을 확인할 수 없는 경우 InputOutputType을 SQL_PARAM_INPUT 설정합니다. 데이터 원본이 매개 변수에 대한 값을 반환하면 드라이버는 이를 삭제합니다.

  • SQL_PARAM_INPUT_OUTPUT. 매개 변수는 프로시저에서 입력/출력 매개 변수를 표시합니다. 예를 들어 {call GetEmpDept(?)}의 매개 변수는 직원의 이름을 수락하고 직원 부서의 이름을 반환하는 입력/출력 매개 변수입니다.

    문이 실행되면 드라이버는 매개 변수에 대한 데이터를 데이터 원본으로 보냅니다. *ParameterValuePtr 버퍼에는 유효한 입력 값이 포함되어야 합니다. 또는 *StrLen_or_IndPtr 버퍼에는 SQL_NULL_DATA, SQL_DATA_AT_EXEC 또는 SQL_LEN_DATA_AT_EXEC 매크로의 결과가 포함되어야 합니다. 문이 실행되면 드라이버는 매개 변수에 대한 데이터를 애플리케이션에 반환합니다. 데이터 원본이 입력/출력 매개 변수의 값을 반환하지 않으면 드라이버는 *StrLen_or_IndPtr 버퍼를 SQL_NULL_DATA 설정합니다.

    참고 항목

    ODBC 1.0 애플리케이션이 ODBC 2.0 드라이버에서 SQLSetParam을 호출하면 드라이버 관리자는 InputOutputType 인수가 SQL_PARAM_INPUT_OUTPUT 설정되는 SQLBindParameter 호출로 변환합니다.

  • SQL_PARAM_OUTPUT. 매개 변수는 프로시저의 반환 값 또는 프로시저의 출력 매개 변수를 표시합니다. 두 경우 모두 출력 매개 변수라고 합니다. 예를 들어 {?=call GetNextEmpID}의 매개 변수는 다음 직원 ID를 반환하는 출력 매개 변수입니다.

    문이 실행된 후 ParameterValuePtr 및 StrLen_or_IndPtr 인수가 모두 null 포인터가 아닌 한 드라이버는 매개 변수에 대한 데이터를 애플리케이션에 반환합니다. 이 경우 드라이버는 출력 값을 삭제합니다. 데이터 원본이 출력 매개 변수의 값을 반환하지 않으면 드라이버는 *StrLen_or_IndPtr 버퍼를 SQL_NULL_DATA 설정합니다.

  • SQL_PARAM_INPUT_OUTPUT_STREAM. 입력/출력 매개 변수를 스트리밍해야 임을 나타냅니다. SQLGetData 는 부분의 매개 변수 값을 읽을 수 있습니다. 버퍼 길이는 SQLGetData 호출 시 결정되므로 BufferLength는 무시됩니다. StrLen_or_IndPtr 버퍼의 값은 SQL_NULL_DATA, SQL_DEFAULT_PARAM, SQL_DATA_AT_EXEC 또는 SQL_LEN_DATA_AT_EXEC 매크로의 결과를 포함해야 합니다. 출력에서 스트리밍되는 경우 매개 변수는 입력 시 DAE(데이터 실행 시) 매개 변수로 바인딩되어야 합니다. ParameterValuePtr은 입력 및 출력 모두에 대해 ParameterValuePtr을 사용하여 값을 전달한 사용자 정의 토큰으로 SQLParamData에서 반환되는 null이 아닌 포인터 값일 수 있습니다. 자세한 내용은 SQLGetData를 사용하여 출력 매개 변수 검색을 참조하세요.

  • SQL_PARAM_OUTPUT_STREAM. 출력 매개 변수의 경우 SQL_PARAM_INPUT_OUTPUT_STREAM 것과 동일합니다. * StrLen_or_IndPtr 입력 시 무시됩니다.

다음 표에서는 InputOutputType 및 *StrLen_or_IndPtr 다양한 조합을 나열합니다.

InputOutputType *StrLen_or_IndPtr 결과 ParameterValuePtr에 대한 설명
SQL_PARAM_INPUT SQL_LEN_DATA_AT_EXEC(len) 또는 SQL_DATA_AT_EXEC 부분 입력 ParameterValuePtr은 값이 ParameterValuePtr로 전달된 사용자 정의 토큰으로 SQLParamData에서 반환되는 포인터 값일 수 있습니다.
SQL_PARAM_INPUT SQL_LEN_DATA_AT_EXEC(len) 또는 SQL_DATA_AT_EXEC 입력 바인딩된 버퍼 ParameterValuePtr 은 입력 버퍼의 주소입니다.
SQL_PARAM_OUTPUT 입력 시 무시됩니다. 출력 바인딩된 버퍼 ParameterValuePtr 은 출력 버퍼의 주소입니다.
SQL_PARAM_OUTPUT_STREAM 입력 시 무시됩니다. 스트리밍된 출력 ParameterValuePtr은 모든 포인터 값일 수 있으며, 이 값은 ParameterValuePtr전달된 사용자 정의 토큰으로 SQLParamData에서 반환됩니다.
SQL_PARAM_INPUT_OUTPUT SQL_LEN_DATA_AT_EXEC(len) 또는 SQL_DATA_AT_EXEC 파트 및 출력 바인딩된 버퍼의 입력 ParameterValuePtr은 출력 버퍼의 주소이며, 값이 ParameterValuePtr전달된 사용자 정의 토큰으로 SQLParamData에서 반환됩니다.
SQL_PARAM_INPUT_OUTPUT SQL_LEN_DATA_AT_EXEC(len) 또는 SQL_DATA_AT_EXEC 입력 바인딩된 버퍼 및 출력 바인딩된 버퍼 ParameterValuePtr 은 공유 입력/출력 버퍼의 주소입니다.
SQL_PARAM_INPUT_OUTPUT_STREAM SQL_LEN_DATA_AT_EXEC(len) 또는 SQL_DATA_AT_EXEC 부분 및 스트리밍 출력의 입력 ParameterValuePtr은 Null이 아닌 포인터 값일 수 있으며, 이 값은 입력 및 출력 모두에 대해 ParameterValuePtr전달된 사용자 정의 토큰으로 SQLParamData에서 반환됩니다.

참고 항목

드라이버는 애플리케이션이 출력 또는 입력 출력 매개 변수를 스트리밍으로 바인딩할 때 허용되는 SQL 형식을 결정해야 합니다. 드라이버 관리자는 잘못된 SQL 형식에 대한 오류를 생성하지 않습니다.

ValueType 인수

ValueType 인수는 매개 변수의 C 데이터 형식을 지정합니다. 이 인수는 APD의 SQL_DESC_TYPE, SQL_DESC_CONCISE_TYPE 및 SQL_DESC_DATETIME_INTERVAL_CODE 필드를 설정합니다. 부록 D: 데이터 형식의 C 데이터 형식 섹션에 있는 값 중 하나여야 합니다.

ValueType 인수가 간격 데이터 형식 중 하나인 경우 APD의 ParameterNumber 레코드의 SQL_DESC_TYPE 필드는 SQL_INTERVAL 설정되고 APD의 SQL_DESC_CONCISE_TYPE 필드는 간결한 간격 데이터 형식으로 설정되고 ParameterNumber 레코드의 SQL_DESC_DATETIME_INTERVAL_CODE 필드는 특정 간격 데이터 형식의 하위 코드로 설정됩니다. (참조) 부록 D: 데이터 형식입니다.) APD의 SQL_DESC_DATETIME_INTERVAL_PRECISION 및 SQL_DESC_PRECISION 필드에 각각 설정된 기본 간격 선행 전체 자릿수(2) 및 기본 간격 초 전체 자릿수(6)가 데이터에 사용됩니다. 기본 전체 자릿수가 적절하지 않은 경우 애플리케이션은 SQLSetDescField 또는 SQLSetDescRec를 호출하여 설명자 필드를 명시적으로 설정해야 합니다.

ValueType 인수가 datetime 데이터 형식 중 하나인 경우 APD의 ParameterNumber 레코드의 SQL_DESC_TYPE 필드가 SQL_DATETIME 설정되고 APD의 ParameterNumber 레코드의 SQL_DESC_CONCISE_TYPE 필드가 간결한 날짜/시간 C 데이터 형식으로 설정되고 ParameterNumber 레코드의 SQL_DESC_DATETIME_INTERVAL_CODE 필드는 특정 날짜/시간 데이터 형식의 하위 코드로 설정됩니다. (참조) 부록 D: 데이터 형식입니다.)

ValueType 인수가 SQL_C_NUMERIC 데이터 형식인 경우 APD의 SQL_DESC_PRECISION 및 SQL_DESC_SCALE 필드에 설정된 기본 전체 자릿수(드라이버 정의) 및 기본 소수 자릿수(0)가 데이터에 사용됩니다. 기본 전체 자릿수 또는 소수 자릿수가 적절하지 않은 경우 애플리케이션은 SQLSetDescField 또는 SQLSetDescRec를 호출하여 설명자 필드를 명시적으로 설정해야 합니다.

SQL_C_DEFAULT 매개 변수 값이 ParameterType으로 지정된 SQL 데이터 형식의 기본 C 데이터 형식에서 전송되도록 지정합니다.

확장된 C 데이터 형식을 지정할 수도 있습니다. 자세한 내용은 ODBC의 C 데이터 형식을 참조하세요.

자세한 내용은 기본 C 데이터 형식, C에서 SQL 데이터 형식으로 데이터 변환, 부록 D: 데이터 형식의 SQL에서 C 데이터 형식으로 데이터 변환을 참조하세요.

ParameterType 인수

부록 D: 데이터 형식의 SQL 데이터 형식 섹션에 나열된 값 중 하나이거나 드라이버별 값이어야 합니다. 이 인수는 IPD의 SQL_DESC_TYPE, SQL_DESC_CONCISE_TYPE 및 SQL_DESC_DATETIME_INTERVAL_CODE 필드를 설정합니다.

ParameterType 인수가 datetime 식별자 중 하나인 경우 IPD의 SQL_DESC_TYPE 필드가 SQL_DATETIME 설정되고 IPD의 SQL_DESC_CONCISE_TYPE 필드가 간결한 날짜/시간 SQL 데이터 형식으로 설정되고 SQL_DESC_DATETIME_INTERVAL_CODE 필드는 적절한 datetime 하위 코드 값으로 설정됩니다.

ParameterType이 간격 식별자 중 하나인 경우 IPD의 SQL_DESC_TYPE 필드는 SQL_INTERVAL 설정되고, IPD의 SQL_DESC_CONCISE_TYPE 필드는 간결한 SQL 간격 데이터 형식으로 설정되고, IPD의 SQL_DESC_DATETIME_INTERVAL_CODE 필드는 적절한 간격 하위 코드로 설정됩니다. IPD의 SQL_DESC_DATETIME_INTERVAL_PRECISION 필드는 전체 자릿수를 선도하는 간격으로 설정되고 SQL_DESC_PRECISION 필드는 해당하는 경우 간격 초 정밀도로 설정됩니다. SQL_DESC_DATETIME_INTERVAL_PRECISION 또는 SQL_DESC_PRECISION 기본값이 적절하지 않은 경우 애플리케이션은 SQLSetDescField를 호출하여 명시적으로 설정해야 합니다. 이러한 필드에 대한 자세한 내용은 SQLSetDescField를 참조 하세요.

ValueType 인수가 SQL_NUMERIC 데이터 형식인 경우 IPD의 SQL_DESC_PRECISION 및 SQL_DESC_SCALE 필드에 설정된 기본 전체 자릿수(드라이버 정의) 및 기본 소수 자릿수(0)가 데이터에 사용됩니다. 기본 전체 자릿수 또는 소수 자릿수가 적절하지 않은 경우 애플리케이션은 SQLSetDescField 또는 SQLSetDescRec를 호출하여 설명자 필드를 명시적으로 설정해야 합니다.

데이터를 변환하는 방법에 대한 자세한 내용은 데이터를 C에서 SQL 데이터 형식으로 변환하고 부록 D: 데이터 형식의 SQL에서 C 데이터 형식으로 데이터를 변환하는 방법을 참조하세요.

ColumnSize 인수

ColumnSize 인수는 매개 변수 표식, 해당 데이터의 길이 또는 둘 다에 해당하는 열 또는 식의 크기를 지정합니다. 이 인수는 SQL 데이터 형식(ParameterType 인수)에 따라 IPD의 다른 필드를 설정합니다. 이 매핑에는 다음 규칙이 적용됩니다.

  • ParameterType이 SQL_CHAR, SQL_VARCHAR, SQL_LONGVARCHAR, SQL_BINARY, SQL_VARBINARY, SQL_LONGVARBINARY 또는 간결한 SQL 날짜/시간 또는 간격 데이터 형식 중 하나인 경우 IPD의 SQL_DESC_LENGTH 필드는 ColumnSize으로 설정됩니다. (자세한 내용은 다음을 참조하세요 .부록 D: 데이터 형식의 열 크기, 10진수, 8진수 길이 전송 및 표시 크기 섹션입니다.)

  • ParameterType이 SQL_DECIMAL, SQL_NUMERIC, SQL_FLOAT, SQL_REAL 또는 SQL_DOUBLE 경우 IPD의 SQL_DESC_PRECISION 필드가 ColumnSize으로 설정됩니다.

  • 다른 데이터 형식의 경우 ColumnSize 인수는 무시됩니다.

자세한 내용은 "매개 변수 값 전달" 및 "StrLen_or_IndPtr 인수"의 SQL_DATA_AT_EXEC 참조하세요.

DecimalDigits 인수

ParameterType이 SQL_TYPE_TIME, SQL_TYPE_TIMESTAMP, SQL_INTERVAL_SECOND, SQL_INTERVAL_DAY_TO_SECOND, SQL_INTERVAL_HOUR_TO_SECOND 또는 SQL_INTERVAL_MINUTE_TO_SECOND 경우 IPD의 SQL_DESC_PRECISION 필드는 DecimalDigits로 설정됩니다. ParameterType이 SQL_NUMERIC 또는 SQL_DECIMAL 경우 IPD의 SQL_DESC_SCALE 필드는 DecimalDigits로 설정됩니다. 다른 모든 데이터 형식의 경우 DecimalDigits 인수는 무시됩니다.

ParameterValuePtr 인수

ParameterValuePtr 인수는 SQLExecute 또는 SQLExecDirect가 호출될 때 매개 변수에 대한 실제 데이터를 포함하는 버퍼를 가리킵니다. 데이터는 ValueType 인수로 지정된 형식이어야 합니다. 이 인수는 APD의 SQL_DESC_DATA_PTR 필드를 설정합니다. *StrLen_or_IndPtr SQL_NULL_DATA 또는 SQL_DATA_AT_EXEC 경우 애플리케이션에서 ParameterValuePtr 인수를 null 포인터로 설정할 수 있습니다. 입력 또는 입력/출력 매개 변수에만 적용됩니다.

*StrLen_or_IndPtr SQL_LEN_DATA_AT_EXEC(length) 매크로 또는 SQL_DATA_AT_EXEC 결과인 경우 ParameterValuePtr 은 매개 변수와 연결된 애플리케이션 정의 포인터 값입니다. SQLParamData를 통해 애플리케이션에 반환됩니다. 예를 들어 ParameterValuePtr는 매개 변수 번호, 데이터에 대한 포인터 또는 애플리케이션이 입력 매개 변수를 바인딩하는 데 사용한 구조체에 대한 포인터와 같은 0이 아닌 토큰일 수 있습니다. 그러나 매개 변수가 입력/출력 매개 변수인 경우 ParameterValuePtr 은 출력 값이 저장될 버퍼에 대한 포인터여야 합니다. SQL_ATTR_PARAMSET_SIZE 문 특성의 값이 1보다 크면 애플리케이션은 SQL_ATTR_PARAMS_PROCESSED_PTR 문 특성이 가리키는 값을 ParameterValuePtr 인수와 함께 사용할 수 있습니다. 예를 들어 ParameterValuePtr 는 값 배열을 가리킬 수 있으며 애플리케이션은 SQL_ATTR_PARAMS_PROCESSED_PTR 가리키는 값을 사용하여 배열에서 올바른 값을 검색할 수 있습니다. 자세한 내용은 이 섹션의 뒷부분에 있는 "매개 변수 값 전달"을 참조하세요.

InputOutputType 인수가 SQL_PARAM_INPUT_OUTPUT 또는 SQL_PARAM_OUTPUT 경우 ParameterValuePtr는 드라이버가 출력 값을 반환하는 버퍼를 가리킵니다. 프로시저에서 하나 이상의 결과 집합을 반환하는 경우 *ParameterValuePtr 버퍼는 모든 결과 집합/행 수가 처리될 때까지 설정되지 않습니다. 처리가 완료될 때까지 버퍼를 설정하지 않으면 SQLMoreResults가 SQL_NO_DATA 반환할 때까지 출력 매개 변수 및 반환 값을 사용할 수 없습니다. SQL_CLOSE 옵션을 사용하여 SQLCloseCursor 또는 SQLFreeStmt를 호출하면 이러한 값이 삭제됩니다.

SQL_ATTR_PARAMSET_SIZE 문 특성의 값이 1 보다 크면 ParameterValuePtr 는 배열을 가리킵니다. 단일 SQL 문은 입력 또는 입력/출력 매개 변수에 대한 입력 값의 전체 배열을 처리하고 입력/출력 또는 출력 매개 변수에 대한 출력 값 배열을 반환합니다.

BufferLength 인수

문자 및 이진 C 데이터의 경우 BufferLength 인수는 *ParameterValuePtr 버퍼의 길이(단일 요소인 경우) 또는 *ParameterValuePtr 배열의 요소 길이(SQL_ATTR_PARAMSET_SIZE 문 특성의 값이 1보다 큰 경우)를 지정합니다. 이 인수는 APD의 SQL_DESC_OCTET_LENGTH 레코드 필드를 설정합니다. 애플리케이션에서 여러 값을 지정하는 경우 BufferLength 는 입력 및 출력 모두에서 *ParameterValuePtr 배열의 값 위치를 결정하는 데 사용됩니다. 입력/출력 및 출력 매개 변수의 경우 출력 시 문자 및 이진 C 데이터를 잘릴지 여부를 결정하는 데 사용됩니다.

  • 문자 C 데이터의 경우 반환할 수 있는 바이트 수가 BufferLength보다 크거나 같으면 *ParameterValuePtr의 데이터가 BufferLength잘려 null 종료 문자의 길이를 줄이고 드라이버에서 null로 종료됩니다.

  • 이진 C 데이터의 경우 반환할 수 있는 바이트 수가 BufferLength보다 큰 경우 *ParameterValuePtr의 데이터는 BufferLength 바이트로 잘립니다.

다른 모든 형식의 C 데이터의 경우 BufferLength 인수는 무시됩니다. *ParameterValuePtr 버퍼의 길이(단일 요소인 경우) 또는 *ParameterValuePtr 배열의 요소 길이(애플리케이션에서 각 매개 변수에 대해 여러 값을 지정하기 위해 SQL_ATTR_PARAMSET_SIZE 특성 인수를 사용하여 SQLSetStmtAttr를 호출하는 경우)는 C 데이터 형식의 길이로 간주됩니다.

스트리밍된 출력 또는 스트리밍된 입력/출력 매개 변수의 경우 버퍼 길이가 SQLGetData지정되어 있으므로 BufferLength 인수는 무시됩니다.

참고 항목

ODBC 1.0 애플리케이션이 ODBC 3에서 SQLSetParam을 호출하는 경우x 드라이버인 드라이버 관리자는 이를 BufferLength 인수가 항상 SQL_SETPARAM_VALUE_MAX SQLBindParameter 호출로 변환합니다. 드라이버 관리자가 ODBC 3인 경우 오류를 반환하기 때문입니다.x 애플리케이션은 BufferLength를 ODBC 3인 SQL_SETPARAM_VALUE_MAX 설정합니다.x 드라이버는 이를 사용하여 ODBC 1.0 애플리케이션에서 호출되는 시기를 결정할 수 있습니다.

참고 항목

SQLSetParam에서 드라이버가 문자 또는 이진 데이터를 반환할 수 있도록 애플리케이션이 *ParameterValuePtr 버퍼의 길이를 지정하는 방식과 애플리케이션이 드라이버에 문자 또는 이진 매개 변수 값 배열을 보내는 방식은 드라이버 정의입니다.

StrLen_or_IndPtr 인수

StrLen_or_IndPtr 인수는 SQLExecute 또는 SQLExecDirect가 호출될 때 다음 중 하나를 포함하는 버퍼를 가리킵니다. (이 인수는 애플리케이션 매개 변수 포인터의 SQL_DESC_OCTET_LENGTH_PTR 및 SQL_DESC_INDICATOR_PTR 레코드 필드를 설정합니다.

  • *ParameterValuePtr에 저장된 매개 변수 값의 길이입니다. 문자 또는 이진 C 데이터를 제외하고 무시됩니다.

  • SQL_NTS. 매개 변수 값은 null로 끝나는 문자열입니다.

  • SQL_NULL_DATA. 매개 변수 값이 NULL입니다.

  • SQL_DEFAULT_PARAM. 프로시저는 애플리케이션에서 검색된 값 대신 매개 변수의 기본값을 사용하는 것입니다. 이 값은 ODBC 정식 구문에서 호출된 프로시저에서만 유효하며 InputOutputType 인수가 SQL_PARAM_INPUT, SQL_PARAM_INPUT_OUTPUT 또는 SQL_PARAM_INPUT_OUTPUT_STREAM 경우에만 유효합니다. *StrLen_or_IndPtr SQL_DEFAULT_PARAM 경우 ValueType, ParameterType, ColumnSize, DecimalDigits, BufferLengthParameterValuePtr 인수는 입력 매개 변수에 대해 무시되며 입력/출력 매개 변수의 출력 매개 변수 값을 정의하는 데만 사용됩니다.

  • SQL_LEN_DATA_AT_EXEC(length) 매크로의 결과입니다. 매개 변수에 대한 데이터는 SQLPutData와 함께 전송됩니다. ParameterType 인수가 SQL_LONGVARBINARY, SQL_LONGVARCHAR 또는 긴 데이터 원본별 데이터 형식이고 드라이버가 SQLGetInfo의 SQL_NEED_LONG_DATA_LEN 정보 형식에 대해 "Y"를 반환하는 경우 길이는 매개 변수에 대해 보낼 데이터의 바이트 수입니다. 그렇지 않으면 길이는 음수가 아닌 값이어야 하며 무시됩니다. 자세한 내용은 이 섹션의 뒷부분에 있는 "매개 변수 값 전달"을 참조하세요.

    예를 들어 하나 이상의 호출에서 SQLPutData사용하여 10,000바이트의 데이터를 보내도록 지정하려면 SQL_LONGVARCHAR 매개 변수의 경우 애플리케이션이 *StrLen_or_IndPtr SQL_LEN_DATA_AT_EXEC(10000)로 설정합니다.

  • SQL_DATA_AT_EXEC. 매개 변수에 대한 데이터는 SQLPutData와 함께 전송됩니다. 이 값은 ODBC 3을 호출할 때 ODBC 1.0 애플리케이션에서 사용됩니다.x 드라이버. 자세한 내용은 이 섹션의 뒷부분에 있는 "매개 변수 값 전달"을 참조하세요.

StrLen_or_IndPtr null 포인터인 경우 드라이버는 모든 입력 매개 변수 값이 NULL이 아니고 해당 문자 및 이진 데이터가 null로 종료된다고 가정합니다. InputOutputType이 SQL_PARAM_OUTPUT 또는 SQL_PARAM_OUTPUT_STREAM ParameterValuePtr StrLen_or_IndPtr 모두 null 포인터인 경우 드라이버는 출력 값을 삭제합니다.

참고 항목

애플리케이션 개발자는 매개 변수의 데이터 형식이 SQL_C_BINARY 때 StrLen_or_IndPtr 대한 null 포인터를 지정하지 않는 것이 좋습니다. 드라이버가 예기치 않게 SQL_C_BINARY 데이터를 자르지 않도록 하려면 StrLen_or_IndPtr 유효한 길이 값에 대한 포인터를 포함해야 합니다.

InputOutputType 인수가 SQL_PARAM_INPUT_OUTPUT, SQL_PARAM_OUTPUT, SQL_PARAM_INPUT_OUTPUT_STREAM 또는 SQL_PARAM_OUTPUT_STREAM 경우 StrLen_or_IndPtr 드라이버가 SQL_NULL_DATA 반환하는 버퍼, *ParameterValuePtr에서 반환할 수 있는 바이트 수(문자 데이터의 null 종료 바이트 제외) 또는 SQL_NO_TOTAL(반환할 수 있는 바이트 수를 확인할 수 없는 경우)를 가리킵니다. 프로시저에서 하나 이상의 결과 집합을 반환하는 경우 모든 결과를 가져올 때까지 *StrLen_or_IndPtr 버퍼가 설정되지 않습니다.

SQL_ATTR_PARAMSET_SIZE 문 특성의 값이 1 보다 크면 StrLen_or_IndPtr SQLLEN 값 배열을 가리킵니다. 이 섹션의 앞부분에 나열된 값 중 하나일 수 있으며 단일 SQL 문으로 처리됩니다.

매개 변수 값 전달

애플리케이션은 *ParameterValuePtr 버퍼 또는 SQLPutData에 대한 하나 이상의 호출을 사용하여 매개 변수 값을 전달할 수 있습니다. SQLPutData를 사용하여 데이터가 전달되는 매개 변수를 실행 시 데이터 매개 변수라고 합니다. 일반적으로 SQL_LONGVARBINARY 및 SQL_LONGVARCHAR 매개 변수에 대한 데이터를 보내는 데 사용되며 다른 매개 변수와 혼합할 수 있습니다.

매개 변수 값을 전달하기 위해 애플리케이션은 다음 단계 시퀀스를 수행합니다.

  1. 각 매개 변수에 대해 SQLBindParameter를 호출하여 매개 변수 값(ParameterValuePtr 인수) 및 길이/표시기(StrLen_or_IndPtr 인수)에 대한 버퍼를 바인딩합니다. 실행 시 데이터 매개 변수의 경우 ParameterValuePtr은 매개 변수 번호 또는 데이터에 대한 포인터와 같은 애플리케이션 정의 포인터 값입니다. 값은 나중에 반환되며 매개 변수를 식별하는 데 사용할 수 있습니다.

  2. 입력 및 입력/출력 매개 변수의 값을 *ParameterValuePtr 및 *StrLen_or_IndPtr 버퍼에 배치합니다.

    • 일반 매개 변수의 경우 애플리케이션은 *ParameterValuePtr 버퍼에 매개 변수 값과 해당 값의 길이를 *StrLen_or_IndPtr 버퍼에 배치합니다. 자세한 내용은 매개 변수 값 설정을 참조 하세요.

    • 실행 시 데이터 매개 변수의 경우 애플리케이션은 *StrLen_or_IndPtr 버퍼에 SQL_LEN_DATA_AT_EXEC(길이) 매크로(ODBC 2.0 드라이버를 호출할 때)의 결과를 넣습니다.

  3. SQLExecute 또는 SQLExecDirect를 호출하여 SQL 문을 실행합니다.

    • 실행 시 데이터 매개 변수가 없으면 프로세스가 완료됩니다.

    • 실행 시 데이터 매개 변수가 있는 경우 함수는 SQL_NEED_DATA 반환합니다.

  4. SQLParamData를 호출하여 처리할 첫 번째 실행 시 데이터 매개 변수에 대해 SQLBindParameterParameterValuePtr 인수에 지정된 애플리케이션 정의 값을 검색합니다. SQLParamData 는 SQL_NEED_DATA 반환합니다.

    참고 항목

    실행 시 데이터 매개 변수는 실행 시 데이터 열과 유사하지만 SQLParamData에서 반환되는 값은 각각 다릅니다. 실행 시 데이터 매개 변수는 SQLExecDirect 또는 SQLExecute를 사용하여 문을 실행할 때 SQLPutData와 함께 데이터를 보내는 SQL 문의 매개 변수입니다. SQLBindParameter바인딩됩니다. SQLParamData에서 반환되는 값은 ParameterValuePtr 인수에서 SQLBindParameter전달된 포인터 값입니다. 실행 시 데이터 열은 행이 SQLBulkOperations로 업데이트되거나 추가되거나 SQLSetPos로 업데이트될 때 SQLPutData데이터를 전송하는 행 집합의 열입니다. SQLBindCol바인딩됩니다. SQLParamData에서 반환되는 값은 처리 중인 *TargetValuePtr 버퍼(SQLBindCol 호출에 의해 설정됨)에 있는 행의 주소입니다.

  5. SQLPutData를 한 번 이상 호출하여 매개 변수에 대한 데이터를 보냅니다. 데이터 값이 SQLPutData에 지정된 *ParameterValuePtr 버퍼보다 큰 경우 둘 이상의 호출이 필요합니다. 동일한 매개 변수에 대한 SQLPutData에 대한 여러 호출은 문자, 이진 또는 데이터 원본별 데이터 형식이 있는 열로 문자 C 데이터를 보내거나 문자가 있는 열에 이진 C 데이터를 보낼 때만 허용됩니다. 이진 또는 데이터 원본별 데이터 형식입니다.

  6. SQLParamData를 다시 호출하여 모든 데이터가 매개 변수에 대해 전송되었음을 알릴 수 있습니다.

    • 실행 시 데이터 매개 변수가 더 많은 경우 SQLParamData는 처리할 다음 실행 시 데이터 매개 변수에 대한 SQL_NEED_DATA 및 애플리케이션 정의 값을 반환합니다. 애플리케이션은 4단계와 5단계를 반복합니다.

    • 실행 시 데이터 매개 변수가 더 이상 없으면 프로세스가 완료됩니다. 문이 성공적으로 실행된 경우 SQLParamData 는 SQL_SUCCESS 반환하거나 SQL_SUCCESS_WITH_INFO; 실행이 실패하면 SQL_ERROR 반환합니다. 이 시점에서 SQLParamData 는 문을 실행하는 데 사용되는 함수(SQLExecDirect 또는 SQLExecute)에서 반환할 수 있는 모든 SQLSTATE를 반환할 수 있습니다.

      입력/출력 또는 출력 매개 변수의 출력 값은 애플리케이션이 문에서 생성된 모든 결과 집합을 검색한 후 *ParameterValuePtr 및 *StrLen_or_IndPtr 버퍼에서 사용할 수 있습니다.

SQLExecute 또는 SQLExecDirect를 호출하면 문이 SQL_NEED_DATA 상태로 유지됩니다. 이 시점에서 애플리케이션은 문 또는 문과 연결된 연결 핸들을 사용하여 SQLCancel, SQLGetDiagField, SQLGetDiagRec, SQLGetFunctions, SQLParamData 또는 SQLPutData호출할있습니다. 문 또는 문과 연결된 연결을 사용하여 다른 함수를 호출하는 경우 함수는 SQLSTATE HY010(함수 시퀀스 오류)을 반환합니다. 이 문은 SQLParamData 또는 SQLPutData가 오류를 반환하거나, SQLParamData가 SQL_SUCCESS 또는 SQL_SUCCESS_WITH_INFO 반환하거나, 문이 취소될 때 SQL_NEED_DATA 상태를 남깁니다.

드라이버에 실행 시 데이터 매개 변수에 대한 데이터가 필요한 동안 애플리케이션이 SQLCancel을 호출하는 경우 드라이버는 문 실행을 취소합니다. 그러면 애플리케이션은 SQLExecute 또는 SQLExecDirect를 다시 호출할 수 있습니다.

스트리밍 출력 매개 변수 검색

애플리케이션이 InputOutputType을 SQL_PARAM_INPUT_OUTPUT_STREAM 또는 SQL_PARAM_OUTPUT_STREAM 설정하면 SQLGetData에 대한 하나 이상의 호출을 통해 출력 매개 변수 값을 검색해야 합니다. 드라이버에 애플리케이션으로 반환할 스트리밍 출력 매개 변수 값이 있는 경우 SQLMoreResults, SQLExecuteSQLExecDirect 함수에 대한 호출에 대한 응답으로 SQL_PARAM_DATA_AVAILABLE 반환합니다. 애플리케이션은 SQLParamData를 호출하여 사용할 수 있는 매개 변수 값을 결정합니다.

SQL_PARAM_DATA_AVAILABLE 및 스트리밍된 출력 매개 변수에 대한 자세한 내용은 SQLGetData를 사용하여 출력 매개 변수 검색을 참조하세요.

매개 변수 배열 사용

애플리케이션이 매개 변수 표식을 사용하여 문을 준비하고 매개 변수 배열을 전달하는 경우 두 가지 방법으로 실행할 수 있습니다. 한 가지 방법은 드라이버가 백 엔드의 배열 처리 기능을 사용하는 것입니다. 이 경우 매개 변수 배열이 있는 전체 문이 하나의 원자 단위로 처리됩니다. Oracle은 배열 처리 기능을 지원하는 데이터 원본의 예입니다. 이 기능을 구현하는 또 다른 방법은 드라이버가 SQL 문의 일괄 처리, 매개 변수 배열의 각 매개 변수 집합에 대해 하나의 SQL 문을 생성하고 일괄 처리를 실행하는 것입니다. UPDATE WHERE CURRENT OF 문에는 매개 변수 배열을 사용할 수 없습니다.

매개 변수 배열이 처리되면 개별 결과 집합/행 개수(각 매개 변수 집합에 대해 하나씩)를 사용할 수 있거나 결과 집합/행 수를 하나로 롤업할 수 있습니다. SQLGetInfoSQL_PARAM_ARRAY_ROW_COUNTS 옵션은 각 매개 변수 집합(SQL_PARC_BATCH)에 행 수를 사용할 수 있는지 또는 하나의 행 개수만 사용할 수 있는지(SQL_PARC_NO_BATCH)를 나타냅니다.

SQLGetInfo의 SQL_PARAM_ARRAY_SELECTS 옵션은 각 매개 변수 집합(SQL_PAS_BATCH)에 결과 집합을 사용할 수 있는지 또는 하나의 결과 집합만 사용할 수 있는지(SQL_PAS_NO_BATCH)를 나타냅니다. 드라이버에서 매개 변수 배열을 사용하여 결과 집합 생성 문을 실행할 수 없으면 SQL_PARAM_ARRAY_SELECTS SQL_PAS_NO_SELECT 반환합니다.

자세한 내용은 SQLGetInfo 함수를 참조 하세요.

매개 변수 배열을 지원하기 위해 SQL_ATTR_PARAMSET_SIZE 문 특성은 각 매개 변수의 값 수를 지정하도록 설정됩니다. 필드가 1보다 크면 APD의 SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR 및 SQL_DESC_OCTET_LENGTH_PTR 필드가 배열을 가리킵니다. 각 배열의 카디널리티는 SQL_ATTR_PARAMSET_SIZE 값과 같습니다.

APD의 SQL_DESC_ROWS_PROCESSED_PTR 필드는 오류 집합을 포함하여 처리된 매개 변수 집합의 수를 포함하는 버퍼를 가리킵니다. 각 매개 변수 집합이 처리될 때 드라이버는 버퍼에 새 값을 저장합니다. null 포인터인 경우 숫자가 반환되지 않습니다. 매개 변수 배열을 사용하면 설정 함수에서 SQL_ERROR 반환되더라도 APD의 SQL_DESC_ROWS_PROCESSED_PTR 필드에서 가리키는 값이 채워집니다. SQL_NEED_DATA 반환되면 APD의 SQL_DESC_ROWS_PROCESSED_PTR 필드가 가리키는 값이 처리 중인 매개 변수 집합으로 설정됩니다.

매개 변수 배열이 바인딩되고 UPDATE WHERE CURRENT OF 문이 실행될 때 발생하는 작업은 드라이버 정의입니다.

열 단위 매개 변수 바인딩

열 단위 바인딩에서 애플리케이션은 개별 매개 변수와 길이/표시기 배열을 각 매개 변수에 바인딩합니다.

열 단위 바인딩을 사용하기 위해 애플리케이션은 먼저 SQL_ATTR_PARAM_BIND_TYPE 문 특성을 SQL_PARAM_BIND_BY_COLUMN 설정합니다. 기본값입니다. 바인딩할 각 열에 대해 애플리케이션은 다음 단계를 수행합니다.

  1. 매개 변수 버퍼 배열을 할당합니다.

  2. 길이/표시기 버퍼의 배열을 할당합니다.

    참고 항목

    열 단위 바인딩을 사용할 때 애플리케이션이 설명자에 직접 쓰는 경우 길이 및 표시기 데이터에 별도의 배열을 사용할 수 있습니다.

  3. 다음 인수를 사용하여 SQLBindParameter를 호출합니다.

    • ValueType 은 매개 변수 버퍼 배열에 있는 단일 요소의 C 형식입니다.

    • ParameterType 은 매개 변수의 SQL 형식입니다.

    • ParameterValuePtr 은 매개 변수 버퍼 배열의 주소입니다.

    • BufferLength 는 매개 변수 버퍼 배열에 있는 단일 요소의 크기입니다. 데이터가 고정 길이 데이터인 경우 BufferLength 인수는 무시됩니다.

    • StrLen_or_IndPtr 길이/표시기 배열의 주소입니다.

이 정보를 사용하는 방법에 대한 자세한 내용은 이 섹션의 뒷부분에 있는 "Comments"의 "ParameterValuePtr 인수"를 참조하세요. 매개 변수의 열 단위 바인딩에 대한 자세한 내용은 매개 변수의 바인딩 배열을 참조 하세요.

행 단위 매개 변수 바인딩

행 단위 바인딩에서 애플리케이션은 바인딩할 각 매개 변수에 대한 매개 변수 및 길이/표시기 버퍼를 포함하는 구조를 정의합니다.

행 단위 바인딩을 사용하기 위해 애플리케이션은 다음 단계를 수행합니다.

  1. 매개 변수 및 길이/표시기 버퍼를 포함하여 단일 매개 변수 집합을 보유할 구조를 정의하고 이러한 구조체의 배열을 할당합니다.

    참고 항목

    행 단위 바인딩을 사용할 때 애플리케이션이 설명자에 직접 쓰는 경우 길이 및 표시기 데이터에 별도의 필드를 사용할 수 있습니다.

  2. SQL_ATTR_PARAM_BIND_TYPE 문 특성을 단일 매개 변수 집합이 포함된 구조체의 크기 또는 매개 변수가 바인딩될 버퍼 인스턴스의 크기로 설정합니다. 바운드 매개 변수의 주소가 지정된 길이로 증가하면 결과가 다음 행에서 동일한 매개 변수의 시작을 가리키도록 하려면 길이에 모든 바인딩된 매개 변수의 공백과 구조 또는 버퍼의 패딩이 포함되어야 합니다. ANSI C에서 sizeof 연산자를 사용하는 경우 이 동작이 보장됩니다.

  3. 바인딩할 각 매개 변수에 대해 다음 인수를 사용하여 SQLBindParameter를 호출합니다.

    • ValueType 은 열에 바인딩할 매개 변수 버퍼 멤버의 형식입니다.

    • ParameterType 은 매개 변수의 SQL 형식입니다.

    • ParameterValuePtr 은 첫 번째 배열 요소에 있는 매개 변수 버퍼 멤버의 주소입니다.

    • BufferLength 는 매개 변수 버퍼 멤버의 크기입니다.

    • StrLen_or_IndPtr 바인딩할 길이/표시기 멤버의 주소입니다.

이 정보를 사용하는 방법에 대한 자세한 내용은 이 섹션의 뒷부분에 있는 "ParameterValuePtr 인수"를 참조하세요. 매개 변수의 행 단위 바인딩에 대한 자세한 내용은 매개 변수의 바인딩 배열을 참조 하세요.

오류 정보

드라이버가 매개 변수 배열을 일괄 처리로 구현하지 않는 경우(SQL_PARAM_ARRAY_ROW_COUNTS 옵션은 SQL_PARC_NO_BATCH 같음) 한 문이 실행된 것처럼 오류 상황이 처리됩니다. 드라이버가 매개 변수 배열을 일괄 처리로 구현하는 경우 애플리케이션은 IPD의 SQL_DESC_ARRAY_STATUS_PTR 헤더 필드를 사용하여 SQL 문의 매개 변수 또는 매개 변수 배열에서 SQLExecDirect 또는 SQLExecute에서 오류를 반환한 매개 변수를 확인할 수 있습니다. 이 필드에는 매개 변수 값의 각 행에 대한 상태 정보가 포함됩니다. 필드가 오류가 발생했음을 나타내는 경우 진단 데이터 구조의 필드는 실패한 매개 변수의 행 및 매개 변수 번호를 나타냅니다. 배열의 요소 수는 APD의 SQL_DESC_ARRAY_SIZE 헤더 필드에 의해 정의되며 SQL_ATTR_PARAMSET_SIZE 문 특성으로 설정할 수 있습니다.

참고 항목

APD의 SQL_DESC_ARRAY_STATUS_PTR 헤더 필드는 매개 변수를 무시하는 데 사용됩니다. 매개 변수를 무시하는 방법에 대한 자세한 내용은 다음 섹션인 "매개 변수 집합 무시"를 참조하세요.

SQLExecute 또는 SQLExecDirect가 SQL_ERROR 반환하면 IPD의 SQL_DESC_ARRAY_STATUS_PTR 필드가 가리키는 배열의 요소에는 SQL_PARAM_ERROR, SQL_PARAM_SUCCESS, SQL_PARAM_SUCCESS_WITH_INFO, SQL_PARAM_UNUSED 또는 SQL_PARAM_DIAG_UNAVAILABLE 포함됩니다.

이 배열의 각 요소에 대해 진단 데이터 구조에는 하나 이상의 상태 레코드가 포함됩니다. 구조체의 SQL_DIAG_ROW_NUMBER 필드는 오류를 발생시킨 매개 변수 값의 행 번호를 나타냅니다. 오류를 발생시킨 매개 변수 행에서 특정 매개 변수를 확인할 수 있는 경우 매개 변수 번호가 SQL_DIAG_COLUMN_NUMBER 필드에 입력됩니다.

이전 매개 변수에서 SQLExecute 또는 SQLExecDirect를 강제로 중단시키는 오류가 발생하여 매개 변수가 사용되지 않은 경우 SQL_PARAM_UNUSED 입력됩니다. 예를 들어 50개의 매개 변수가 있고 SQLExecute 또는 SQLExecDirect가 중단된 매개 변수의 40번째 집합을 실행하는 동안 오류가 발생한 경우 매개 변수 41부터 50까지의 상태 배열에 SQL_PARAM_UNUSED 입력됩니다.

드라이버가 매개 변수 배열을 모놀리식 단위로 처리할 때 SQL_PARAM_DIAG_UNAVAILABLE 입력되므로 이 개별 매개 변수 수준의 오류 정보가 생성되지 않습니다.

단일 매개 변수 집합 처리 시 일부 오류로 인해 배열의 후속 매개 변수 집합 처리가 중지됩니다. 다른 오류는 후속 매개 변수 처리에 영향을 미치지 않습니다. 처리를 중지하는 오류는 드라이버 정의입니다. 처리가 중지되지 않으면 배열의 모든 매개 변수가 처리되고, SQL_SUCCESS_WITH_INFO 오류의 결과로 반환되고, SQL_ATTR_PARAMS_PROCESSED_PTR 정의된 버퍼는 처리된 매개 변수 집합의 총 개수(SQL_ATTR_PARAMSET_SIZE 문 특성에 정의된 대로)로 설정됩니다. 여기에는 오류 집합이 포함됩니다.

주의

ODBC 3에서는 매개 변수 배열 처리 시 오류가 발생할 때의 ODBC 동작이 다릅니다.x 는 ODBC 2에 있는 것보다 큽 수 있습니다.x. ODBC 2에서x, 함수가 SQL_ERROR 반환하고 처리가 중단되었습니다. SQLParamOptionspirow 인수가 가리키는 버퍼에 오류 행의 수가 포함되어 있습니다. ODBC 3에서.x, 함수는 SQL_SUCCESS_WITH_INFO 반환하며 처리가 중지되거나 계속될 수 있습니다. 계속하면 SQL_ATTR_PARAMS_PROCESSED_PTR 지정된 버퍼가 오류가 발생한 매개 변수를 포함하여 처리된 모든 매개 변수의 값으로 설정됩니다. 이러한 동작 변경으로 인해 기존 애플리케이션에 문제가 발생할 수 있습니다.

SQL_ERROR 또는 SQL_NEED_DATA 반환되는 경우와 같이 매개 변수 배열의 모든 매개 변수 집합 처리를 완료하기 전에 SQLExecute 또는 SQLExecDirect가 반환되는 경우 상태 배열에는 이미 처리된 매개 변수에 대한 상태가 포함됩니다. IPD의 SQL_DESC_ROWS_PROCESSED_PTR 필드가 가리키는 위치에는 SQL_ERROR 또는 SQL_NEED_DATA 오류 코드를 발생시킨 매개 변수 배열의 행 번호가 포함됩니다. 매개 변수 배열이 SELECT 문으로 전송되면 상태 배열 값의 가용성은 드라이버 정의입니다. 문이 실행되거나 결과 집합이 페치된 후에 사용할 수 있습니다.

매개 변수 집합 무시

APD의 SQL_DESC_ARRAY_STATUS_PTR 필드(SQL_ATTR_PARAM_STATUS_PTR 문 특성에 의해 설정됨)를 사용하여 SQL 문의 바인딩된 매개 변수 집합을 무시해야 함을 나타낼 수 있습니다. 실행 중에 하나 이상의 매개 변수 집합을 무시하도록 드라이버에 지시하려면 애플리케이션이 다음 단계를 수행해야 합니다.

  1. SQLSetDescField를 호출하여 상태 정보를 포함하도록 SQLUSMALLINT 값 배열을 가리키도록 APD의 SQL_DESC_ARRAY_STATUS_PTR 헤더 필드를 설정합니다. 이 필드는 설명자 핸들을 가져오지 않고 애플리케이션이 필드를 설정할 수 있도록 SQL_ATTR_PARAM_OPERATION_PTR 특성을 사용하여 SQLSetStmtAttr 를 호출하여 설정할 수도 있습니다.

  2. APD의 SQL_DESC_ARRAY_STATUS_PTR 필드에 정의된 배열의 각 요소를 다음 두 값 중 하나로 설정합니다.

    • SQL_PARAM_IGNORE 행이 문 실행에서 제외되었음을 나타냅니다.

    • SQL_PARAM_PROCEED 행이 문 실행에 포함되어 있음을 나타냅니다.

  3. SQLExecDirect 또는 SQLExecute를 호출하여 준비된 문을 실행합니다.

다음 규칙은 APD의 SQL_DESC_ARRAY_STATUS_PTR 필드에 정의된 배열에 적용됩니다.

  • 포인터는 기본적으로 null로 설정됩니다.

  • 포인터가 null이면 모든 요소가 SQL_ROW_PROCEED 설정된 것처럼 모든 매개 변수 집합이 사용됩니다.

  • 요소를 SQL_PARAM_PROCEED 설정해도 작업이 특정 매개 변수 집합을 사용하도록 보장하지는 않습니다.

  • SQL_PARAM_PROCEED 헤더 파일에서 0으로 정의됩니다.

애플리케이션은 APD의 SQL_DESC_ARRAY_STATUS_PTR 필드를 설정하여 IRD의 SQL_DESC_ARRAY_STATUS_PTR 필드가 가리키는 것과 동일한 배열을 가리킬 수 있습니다. 이는 행 데이터에 매개 변수를 바인딩할 때 유용합니다. 그런 다음 행 데이터의 상태에 따라 매개 변수를 무시할 수 있습니다. SQL_PARAM_IGNORE 외에도 SQL 문의 매개 변수가 무시됩니다. SQL_ROW_DELETED, SQL_ROW_UPDATED 및 SQL_ROW_ERROR. SQL_PARAM_PROCEED 외에도 SQL 문이 계속 진행되도록 하는 코드는 SQL_ROW_SUCCESS, SQL_ROW_SUCCESS_WITH_INFO 및 SQL_ROW_ADDED.

매개 변수 다시 바인딩

애플리케이션은 두 작업 중 하나를 수행하여 바인딩을 변경할 수 있습니다.

  • SQLBindParameter를 호출하여 이미 바인딩된 열에 대한 새 바인딩을 지정합니다. 드라이버는 이전 바인딩을 새 바인딩으로 덮어씁니다.

  • SQLBindParameter에 대한 바인딩 호출에 의해 지정된 버퍼 주소에 추가할 오프셋을 지정합니다. 자세한 내용은 다음 섹션인 "오프셋으로 다시 바인딩"을 참조하세요.

오프셋을 사용하여 다시 바인딩

매개 변수 다시 바인딩은 애플리케이션에 많은 매개 변수를 포함할 수 있는 버퍼 영역 설정이 있지만 SQLExecDirect 또는 SQLExecute대한 호출에서 몇 가지 매개 변수만 사용하는 경우에 특히 유용합니다. 버퍼 영역의 나머지 공간은 오프셋으로 기존 바인딩을 수정하여 다음 매개 변수 집합에 사용할 수 있습니다.

APD의 SQL_DESC_BIND_OFFSET_PTR 헤더 필드는 바인딩 오프셋을 가리킵니다. 필드가 null이 아닌 경우 드라이버는 포인터를 역참조하고 SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR 및 SQL_DESC_OCTET_LENGTH_PTR 필드의 값이 null 포인터가 아닌 경우 실행 시 설명자 레코드의 해당 필드에 역참조된 값을 추가합니다. 새 포인터 값은 SQL 문이 실행될 때 사용됩니다. 오프셋은 다시 바인딩한 후에도 유효합니다. SQL_DESC_BIND_OFFSET_PTR 오프셋 자체가 아닌 오프셋에 대한 포인터이므로 설명자 필드를 변경하기 위해 SQLSetDescField 또는 SQLSetDescRec를 호출하지 않고도 애플리케이션에서 오프셋을 직접 변경할 수 있습니다. 포인터는 기본적으로 null로 설정됩니다. ARD의 SQL_DESC_BIND_OFFSET_PTR 필드는 SQLSetDescField를 호출하거나 fAttribute가 SQL_ATTR_PARAM_BIND_OFFSET_PTR SQLSetStmtAttr을 호출하여 설정할 수 있습니다.

바인딩 오프셋은 항상 SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR 및 SQL_DESC_OCTET_LENGTH_PTR 필드의 값에 직접 추가됩니다. 오프셋이 다른 값으로 변경된 경우 새 값은 여전히 각 설명자 필드의 값에 직접 추가됩니다. 새 오프셋은 필드 값과 이전 오프셋의 합계에 추가되지 않습니다.

설명자

매개 변수가 바인딩되는 방법은 APD 및 IPD의 필드에 따라 결정됩니다. SQLBindParameter인수는 해당 설명자 필드를 설정하는 데 사용됩니다. SQLBindParameter는 애플리케이션이 SQLBindParameter를 호출하기 위해 설명자 핸들을 가져올 필요가 없으므로 사용하는 것이 더 효율적이지만 SQLSetDescField 함수에서 필드를 설정할 수도 있습니다.

주의

한 문에 대해 SQLBindParameter를 호출하면 다른 문에 영향을 줄 수 있습니다. 이 문제는 문과 연결된 ARD가 명시적으로 할당되고 다른 문과도 연결된 경우에 발생합니다. SQLBindParameter는 APD의 필드를 수정하므로 이 설명자가 연결된 모든 문에 수정 내용이 적용됩니다. 이 동작이 필수 동작이 아닌 경우 애플리케이션은 SQLBindParameter를 호출하기 전에 다른 문에서 이 설명자를 분리해야 합니다.

개념적으로 SQLBindParameter 는 다음 단계를 순서대로 수행합니다.

  1. SQLGetStmtAttr을 호출하여 APD 핸들을 가져옵니다.

  2. SQLGetDescField를 호출하여 APD의 SQL_DESC_COUNT 필드를 구하고 ColumnNumber 인수 값이 SQL_DESC_COUNT 값을 초과하는 경우 SQLSetDescField를 호출하여 SQL_DESC_COUNT 값을 ColumnNumber입니다.

  3. SQLSetDescField를 여러 번 호출하여 APD의 다음 필드에 값을 할당합니다.

    • valueType이 날짜/시간 또는 간격 하위 형식의 간결한 식별자 중 하나인 경우 SQL_DESC_TYPE 각각 SQL_DATETIME 또는 SQL_INTERVAL 설정하고, SQL_DESC_CONCISE_TYPE 간결한 식별자에 설정하고, SQL_DESC_DATETIME_INTERVAL_CODE 해당 datetime 또는 interval 하위 코드로 설정한다는 점을 제외하고 SQL_DESC_TYPE 및 SQL_DESC_CONCISE_TYPE ValueType 값으로 설정합니다.

    • SQL_DESC_OCTET_LENGTH 필드를 BufferLength으로 설정합니다.

    • SQL_DESC_DATA_PTR 필드를 ParameterValue으로 설정합니다.

    • SQL_DESC_OCTET_LENGTH_PTR 필드를 StrLen_or_Ind으로 설정합니다.

    • SQL_DESC_INDICATOR_PTR 필드도 StrLen_or_Ind으로 설정합니다.

    StrLen_or_Ind 매개 변수는 매개 변수 값의 표시기 정보와 길이를 모두 지정합니다.

  4. SQLGetStmtAttr을 호출하여 IPD 핸들을 가져옵니다.

  5. SQLGetDescField를 호출하여 IPD의 SQL_DESC_COUNT 필드를 구하고 ColumnNumber 인수 값이 SQL_DESC_COUNT 값을 초과하는 경우 SQLSetDescField를 호출하여 SQL_DESC_COUNT 값을 ColumnNumber입니다.

  6. SQLSetDescField를 여러 번 호출하여 IPD의 다음 필드에 값을 할당합니다.

    • SQL_DESC_TYPE 및 SQL_DESC_CONCISE_TYPE ParameterType이 datetime 또는 interval 하위 형식의 간결한 식별자 중 하나인 경우 SQL_DESC_TYPE 각각 SQL_DATETIME 또는 SQL_INTERVAL 설정하고 SQL_DESC_CONCISE_TYPE 간결한 식별자로 설정하고 SQL_DESC_DATETIME_INTERVAL_CODE 해당 날짜/시간 또는 간격 하위 코드로 설정한다는 점을 제외하고 ParameterType으로 설정합니다.

    • ParameterType에 적합한 하나 이상의 SQL_DESC_LENGTH, SQL_DESC_PRECISION 및 SQL_DESC_DATETIME_INTERVAL_PRECISION 설정합니다.

    • SQL_DESC_SCALE DecimalDigits으로 설정합니다.

SQLBindParameter에 대한 호출이 실패하면 APD에서 설정한 설명자 필드의 콘텐츠가 정의되지 않고 APD의 SQL_DESC_COUNT 필드가 변경되지 않습니다. 또한 IPD에서 적절한 레코드의 SQL_DESC_LENGTH, SQL_DESC_PRECISION, SQL_DESC_SCALE 및 SQL_DESC_TYPE 필드는 정의되지 않으며 IPD의 SQL_DESC_COUNT 필드는 변경되지 않습니다.

SQLSetParam에 대한 호출 변환

ODBC 1.0 애플리케이션이 ODBC 3에서 SQLSetParam을 호출하는 경우x 드라이버, ODBC 3.x 드라이버 관리자는 다음 표와 같이 호출을 매핑합니다.

ODBC 1.0 애플리케이션에서 호출 ODBC 3을 호출합니다.x 드라이버
SQLSetParam( StatementHandle, ParameterNumber, ValueType, ParameterType, LengthPrecision, ParameterScale, ParameterValuePtr, StrLen_or_IndPtr); SQLBindParameter( StatementHandle, ParameterNumber, SQL_PARAM_INPUT_OUTPUT, ValueType, ParameterType, ColumnSize, DecimalDigits, ParameterValuePtr, SQL_SETPARAM_VALUE_MAX, StrLen_or_IndPtr);

예제

A. SQLBindParameter 함수 사용

다음 예제에서 애플리케이션은 ORDERS 테이블에 데이터를 삽입하기 위해 SQL 문을 준비합니다. 문의 각 매개 변수에 대해 애플리케이션은 SQLBindParameter를 호출하여 ODBC C 데이터 형식과 매개 변수의 SQL 데이터 형식을 지정하고 각 매개 변수에 버퍼를 바인딩합니다. 각 데이터 행에 대해 애플리케이션은 각 매개 변수에 데이터 값을 할당하고 SQLExecute를 호출하여 문을 실행합니다.

다음 샘플에서는 Northwind 데이터베이스와 연결된 Northwind라는 컴퓨터에 ODBC 데이터 원본이 있다고 가정합니다.

자세한 코드 예제는 SQLBulkOperations 함수, SQLProcedures 함수, SQLPutData 함수SQLSetPos 함수를 참조하세요.

// SQLBindParameter_Function.cpp  
// compile with: ODBC32.lib  
#include <windows.h>  
#include <sqltypes.h>  
#include <sqlext.h>  
  
#define EMPLOYEE_ID_LEN 10  
  
SQLHENV henv = NULL;  
SQLHDBC hdbc = NULL;  
SQLRETURN retcode;  
SQLHSTMT hstmt = NULL;  
SQLSMALLINT sCustID;  
  
SQLCHAR szEmployeeID[EMPLOYEE_ID_LEN];  
SQL_DATE_STRUCT dsOrderDate;  
SQLINTEGER cbCustID = 0, cbOrderDate = 0, cbEmployeeID = SQL_NTS;  
  
int main() {  
   retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);  
   retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0);   
  
   retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);   
   retcode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0);  
  
   retcode = SQLConnect(hdbc, (SQLCHAR*) "Northwind", SQL_NTS, (SQLCHAR*) NULL, 0, NULL, 0);  
   retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);  
  
   retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, EMPLOYEE_ID_LEN, 0, szEmployeeID, 0, &cbEmployeeID);  
   retcode = SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &sCustID, 0, &cbCustID);  
   retcode = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_TYPE_DATE, SQL_TIMESTAMP, sizeof(dsOrderDate), 0, &dsOrderDate, 0, &cbOrderDate);  
  
   retcode = SQLPrepare(hstmt, (SQLCHAR*)"INSERT INTO Orders(CustomerID, EmployeeID, OrderDate) VALUES (?, ?, ?)", SQL_NTS);  
  
   strcpy_s((char*)szEmployeeID, _countof(szEmployeeID), "BERGS");  
   sCustID = 5;  
   dsOrderDate.year = 2006;  
   dsOrderDate.month = 3;  
   dsOrderDate.day = 17;  
  
   retcode = SQLExecute(hstmt);  
}  

B. 명명된 매개 변수를 사용하여 저장 프로시저 실행

다음 예제에서 애플리케이션은 명명된 매개 변수를 사용하여 SQL Server 저장 프로시저를 실행합니다.

// SQLBindParameter_Function_2.cpp  
// compile with: ODBC32.lib  
// sample assumes the following stored procedure:  
// use northwind  
// DROP PROCEDURE SQLBindParameter  
// GO  
//   
// CREATE PROCEDURE SQLBindParameter @quote int  
// AS  
// delete from orders where OrderID >= @quote  
// GO  
#include <windows.h>  
#include <sqltypes.h>  
#include <sqlext.h>  
  
SQLHDESC hIpd = NULL;  
SQLHENV henv = NULL;  
SQLHDBC hdbc = NULL;  
SQLRETURN retcode;  
SQLHSTMT hstmt = NULL;  
SQLCHAR szQuote[50] = "100084";  
SQLINTEGER cbValue = SQL_NTS;  
  
int main() {  
   retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);  
   retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0);   
  
   retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);   
   retcode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0);  
  
   retcode = SQLConnect(hdbc, (SQLCHAR*) "Northwind", SQL_NTS, (SQLCHAR*) NULL, 0, NULL, 0);  
   retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);  
  
   retcode = SQLPrepare(hstmt, (SQLCHAR*)"{call SQLBindParameter(?)}", SQL_NTS);  
   retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 50, 0, szQuote, 0, &cbValue);  
   retcode = SQLGetStmtAttr(hstmt, SQL_ATTR_IMP_PARAM_DESC, &hIpd, 0, 0);  
   retcode = SQLSetDescField(hIpd, 1, SQL_DESC_NAME, "@quote", SQL_NTS);  
  
   retcode = SQLExecute(hstmt);  
}  
추가 정보 참조
문에서 매개 변수에 대한 정보 반환 SQLDescribeParam 함수
SQL 문 실행 SQLExecDirect 함수
준비된 SQL 문 실행 SQLExecute 함수
문에서 매개 변수 버퍼 해제 SQLFreeStmt 함수
문 매개 변수 수 반환 SQLNumParams 함수
다음 매개 변수를 반환하여 에 대한 데이터를 보냅니다. SQLParamData 함수
여러 매개 변수 값 지정 SQLParamOptions 함수
실행 시 매개 변수 데이터 보내기 SQLPutData 함수

참고 항목

ODBC API 참조
ODBC 헤더 파일
SQLGetData를 사용하여 출력 매개 변수 검색