Re: Syntax Error
Frediano Ziglio <[email protected]>
| Newsgroups | gmane.comp.db.tds.freetds |
|---|---|
| Message-ID | <CAHt6W4de_Rf=zittHBEX2Cq0i8Ue3Z65+zWutq2tOFCknG_XVQ@mail.gmail.com> |
2015-11-27 10:21 GMT+00:00 Manasi Deshpande <[email protected]>: > 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