[freetds] Syntax Error

Frediano Ziglio freddy77 at gmail.com
Fri Nov 27 09:48:50 EST 2015


2015-11-27 10:21 GMT+00:00 Manasi Deshpande <Manasi.Deshpande at renishaw.com>:
> Hello,
>
> Environment:
> Ubuntu 14.04
> UnixOdbc-2.3.4
> Built and installed from freetds-0.95.69 and TDS version is 7.3
>
> Issue:
> In this we are trying to query DB with IDs to return a collection of items.
>
>             RETCODE RetCode;
>             SQLSMALLINT sNumResults;
>
>             int idCount = 0;
>             _INT64 *arrIds =ArrayOfIds.GetArray();
>             U_stringstream idStr;
>
>             idStr << _U("(");
>
>             for (int i = 0; i < idCount; i++)
>             {
>                         idStr << arrIds[i];
>                         if (i < idCount - 1)
>                                     idStr << _U(",");
>             }
>
>             idStr << _U(")");
>             U_STRING idString = idStr.str();
>
>             SQLUSMALLINT ParamStatusArray[2];
>             SQLULEN ParamsProcessed;
>
>             SQLHANDLE hStmt = dbCon.getStmtHandle();
>             SQLHANDLE hConn = dbCon.getConnHandle();
>
>
>             // Specify the number of elements in each parameter array.
>             TRYODBC(hStmt, SQL_HANDLE_STMT, SQLSetStmtAttr(hStmt, SQL_ATTR_PARAMSET_SIZE, (SQLPOINTER)idCount, 0));
>
>             // Specify an array in which to return the status of each set of
>             // parameters.
>             TRYODBC(hStmt, SQL_HANDLE_STMT, SQLSetStmtAttr(hStmt, SQL_ATTR_PARAM_STATUS_PTR, ParamStatusArray, idCount));
>
>             // Specify an SQLUINTEGER value in which to return the number of sets of
>             // parameters processed.
>             TRYODBC(hStmt, SQL_HANDLE_STMT, SQLSetStmtAttr(hStmt, SQL_ATTR_PARAMS_PROCESSED_PTR, &ParamsProcessed, 0));
>
>             //Bind Parameters
>             //TRYODBC(hStmt, SQL_HANDLE_STMT, SQLBindParameter(hStmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, arrIds, 0, NULL));
>
>             U_STRING  query = _U("SELECT query WHERE ITEM.Id in ") + idString + _U(" ORDER BY ITEM.Id ASC");
>

I would first try with an easy query like "SELECT 1"

>             RetCode = SQLExecDirect(hStmt, (SQLTCHAR*)query.c_str(), SQL_NTS);
>

In which encoding the U_STRING store the string. No, Unicode is not
enough (if you don't specify the version).

>From the code above query.c_str() should return a NUL-terminated
string encoded in UTF-16 or UCS-2 format (endian machine dependent).

Should not be SQLExecDirectW or did you enabled UNICODE define in
Makefile/project file(s) ?

> The Execute statement returns the following error information.
> [FreeTDS][SQL Server]Incorrect syntax near
>
> Any help/inputs appreciated!
>
> Thanks,
> Manasi

Frediano


More information about the FreeTDS mailing list