Some examples for enabling LOB locator support.
// Assumes that DSN has been named "sampledsn" and // UseLobLocator has been set to 1. SQLHENV environmentHandle = SQL_NULL_HANDLE; SQLHDBC connectionHande = SQL_NULL_HANDLE; SQLHSTMT statementHandle = SQL_NULL_HANDLE; SQLRETURN ret; SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &environmentHandle); SQLSetEnvAttr(environmentHandle, SQL_ATTR_ODBC_VERSION, SQL_ATTR_OV_ODBC3); SQLAllocHandle(SQL_HANDLE_DBC, environmentHandle, &connectionHandle); Ret = SQLConnect(connectionHandle, "sampledsn", SQL_NTS, "sa", SQL_NTS, "Sybase",SQL_NTS);
// Selects and retrieves a locator for bk_desc, where
// bk_desc is a column of type text defined in a table
// named books. bk_desc contains the text "A book".
SQLPrepare(statementHandle, "SELECT bk_desc FROM books
   WHERE bk_id =1", SQL_NTS);
SQLExecute(statementHandle);
BYTE TextLocator[SQL_LOCATOR_SIZE];
SQLLEN Len = 0;
ret = SQLGetData(statementHandle, SQL_C_TEXT_LOCATOR, 
   TextLocator, sizeof(TextLocator),&Len);
If(Len == sizeof(TextLocator))
{
   Cout << Locator was created with expected size <<
   Len;
}
      SQLLEN LocatorLen = sizeof(TextLocator);
ret = SQLBindParameter(statementHandle, 1,
   SQL_PARAM_INPUT, SQL_C_TEXT_LOCATOR, 
   SQL_TEXT_LOCATOR, SQL_LOCATOR_SIZE, 0, TextLocator,
   sizeof(TextLocator), &LocatorLen);
SQLLEN CharLenSize = 0;
SQLINTEGER CharLen = 0;
ret = SQLBindParameter(statementHandle, 2,
SQL_PARAM_OUTPUT, SQL_C_LONG,SQL_INTEGER,0 , 0,
&CharLen, sizeof(CharLen), &CharLenSize);
SQLExecDirect(statementHandle, 
   "{CALL sp_drv_text_locator_charlength( ?,?) }" , SQL_NTS);
cout<< "Character Length of Data " << charLen;
      SQLINTEGER retVal = 0;
SQLLEN Col1Len = sizeof(retVal);
SQLCHAR appendText[10]=”abcdefghi on C++”;
SQLBindParameter(statementHandle, 14,
   SQL_PARAM_OUTPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &retVal, 0, Col1Len);
SQLBindParameter(statementHandle, 21, SQL_PARAM_INPUT,
   SQL_C_TEXT_LOCATOR, SQL_TEXT_LOCATOR,
   SQL_LOCATOR_SIZE, 0, &TextLocator, 
   sizeof(TextLocator), SQL_NULL_HANDLE);
SQLBindParameter(statementHandle, 32, SQL_PARAM_INPUT,
   SQL_C_SLONG, SQL_INTEGER, 0, 0, &charLen, 0, SQL_NULL_HANDLE);
SQLBindParameter(statementHandle, 43, SQL_PARAM_INPUT,
   SQL_C_CHAR, SQL_CHAR, 10, 0, append_text,
   sizeof(append_text), SQL_NULL_HANDLE);
SQLExecDirect(statementHandle, 
   "{? = CALL sp_drv_setdata_text (?, ?, ?,?) }" , SQL_NTS);
SQLFreeStmt(statementHandle, SQL_CLOSE);
      SQLCHAR description[512];
SQLLEN descriptionLength = 512;
SQLBindParameter(statementHandle, 1, SQL_PARAM_INPUT,
   SQL_C_TEXT_LOCATOR, SQL_TEXT_LOCATOR,
   SQL_LOCATOR_SIZE, 0, TextLocator,
   sizeof(TextLocator), SQL_NULL_HANDLE);
SQLExecDirect(statementHandle, "{CALL sp_drv_locator_to_text(?)}", SQL_NTS);
SQLFetch(statementHandle);
SQLGetData(statementHandle, 1,SQL_C_CHAR, description,
   descriptionLength, &descriptionLength)
Cout << "LOB data referenced by locator:" << description
   << endl;
Cout << "Expected LOB data:A book on C++" << endl;
      description = "A lot of data that will be used for a lot
   of inserts, updates and deletes"; descriptionLength = SQL_NTS;
SQLBindParameter(statementHandle, 1, SQL_PARAM_INPUT,
   SQL_C_CHAR, SQL_CHAR, 512, 0, description,
   sizeof(description), &descriptionLength);
SQLExecDirect(statementHandle, 
   "{CALL sp_drv_create_text_locator(?)}", SQL_NTS);
SQLFetch(statementHandle);
SQLGetData(statementHandle, SQL_C_TEXT_LOCATOR, 
   TextLocator, sizeof(TextLocator),&Len);