SQLRETURN SQLBindParameter(
SQLHSTMT StatementHandle,
SQLUSMALLINT ParameterNumber,
SQLSMALLINT InputOutputType,
SQLSMALLINT ValueType,
SQLSMALLINT ParameterType,
SQLULEN ColumnSize,
SQLSMALLINT DecimalDigits,
SQLPOINTER ParameterValuePtr,
SQLLEN BufferLength,
SQLLEN * StrLen_or_IndPtr);
여기에서 StrLen_or_IndPtr 가 NULL이면 ParameterValuePtr은 null로 끝나는 문자열로 간주된다.
그래서 바이너리 데이터를 DB에 복사하려고 하면 null을 만나는 지점에서 데이터가 잘려서 DB에 복사된다.
SQLLEN 형의 변수를 생성해서 데이터 길이를 넣어주고 그 포인터를 StrLen_or_IndPtr인자에 대입해줘야 원하는 결과를 얻을 수 있다.
여기서 중요한건 SQLExecute() 함수가 끝날때까지 StrLen_or_IndPtr에 넣어준 포인터가 유지되어야 한다.
그렇지 않을경우 에러를 내거나 오동작 하게된다.
참고로 바이너리 데이터를 위해서 ValueType은 SQL_C_BINARY ParameterType은 SQL_LONGVARBINARY 그리고 테이블의 컬럼은 varbinary로 선언해주었다.