Re: Issue with SQLParamData and SQLPutData and image column

Michel Chamberland <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Message-ID <CACD=xoNhwMC+NV0uEnwQO4LXtiEw-VKfQbzRJBezfZb6ziwSnQ@mail.gmail.com>
thanks for the new stable 0.91! :)

Now have nicer trace but my issue remains :|

odbc.c:3510:SQLExecute returns SQL_NEED_DATA (start_parse_prepared_query
failed)
odbc.c:6032:SQLParamData(0x88bdde0, 0xffd4cb70) [param_num 2,
param_data_called = 0]
odbc.c:6076:SQLParamData returns SQL_NEED_DATA
odbc.c:6087:SQLPutData(0x88bdde0, 0xffd44954, 58)
prepare_query.c:300:continue_parse_prepared_query with parameter 2
odbc.c:6095:SQLPutData returns SQL_SUCCESS, 0 bytes left
odbc.c:6032:SQLParamData(0x88bdde0, 0xffd4cb70) [param_num 2,
param_data_called = 1]
sql2tds.c:185:type=4
sql2tds.c:193:trace
odbc.c:6076:SQLParamData returns SQL_ERROR
error.c:517:SQLGetDiagRec(3, 0x88bdde0, 1, 0xffd447ce, 0xffd443a8,
0xffd445ce, 512, 0xffd443a4)
error.c:517:SQLGetDiagRec(3, 0x88bdde0, 1, 0xffd445f5, 0xffd445fc,
0xffd444f5, 256, 0xffd444f2)
error.c:517:SQLGetDiagRec(2, 0x88c0ee8, 1, 0xffd445f5, 0xffd445fc,
0xffd444f5, 256, 0xffd444f2)


On Thu, Aug 18, 2011 at 10:54 AM, Michel Chamberland <[email protected]>wrote:

> is there a valid case where a SQLParamData could return ERROR but
> GetDiagRect returns NO_DATA? My understanding is that should not happen. Is
> that correct?
>
> [ODBC][639][1313679135.239507][SQLPutData.c][148]
>                 Entry:
>                         Statement = 0x8179f10
>                         Data = 0xfffa11a0
>                         StrLen = 29
> [ODBC][639][1313679135.239540][SQLPutData.c][309]
>                 Exit:[SQL_SUCCESS]
> [ODBC][639][1313679135.239560][SQLParamData.c][166]
>                 Entry:
>                         Statement = 0x8179f10
>                         Value = 0xfffa91a0
> [ODBC][639][1313679135.239605][SQLParamData.c][356]
>                 Exit:[SQL_ERROR]
>                         Value = 0x2
> [ODBC][639][1313679135.239673][SQLGetDiagRec.c][758]
>                 Entry:
>                         Statement = 0x8179f10
>                         Rec Number = 1
>                         SQLState = 0xfffa1035
>                         Native = 0xfffa103c
>                         Message Text = 0xfffa0f35
>                         Buffer Length = 256
>                         Text Len Ptr = 0xfffa0f32
> [ODBC][639][1313679135.239707][SQLGetDiagRec.c][795]
>                 Exit:[SQL_NO_DATA]
>
> Thanks!
> Michel
> On Wed, Aug 17, 2011 at 3:09 PM, Michel Chamberland <[email protected]>wrote:
>
>>
>> Hello List,
>>
>> After reading many posts from the mailing list, MSDN odbc documentation
>> and the freetds documentation, I am turning to the list for help. I have
>> code that used to work with the datadirect odbc drivers but I now want to
>> start using unixodbc with freetds. Everything looks fine until I run a
>> SQLPutData (and send all the data in one swoop since its only 27 bytes in my
>> test case). The problem I am having is that SQLPutData returns SQL_SUCCESS
>> then when I call SQLParamData to see if I need to send anything else, it
>> returns SQL_ERROR but if i try a GetDiagRec for the STMT, it doesn't report
>> any errors so I'm not sure what to fix. Stepping thru the code doesn't point
>> to anything interesting.. I am not looking for spoon feeding but any idea or
>> suggestions to help me solve this issue will be deeply appreciated!
>>
>> *Here is a (very) simplified version of my code:*
>>
>> snprintf(request, sizeof(request), " { ? =  call upload_file (
>> 'testfile.txt', '2011-08-17 18:40', ? , ? ) }")
>> SQLPrepare (hstmt, (UCHAR *) request, SQL_NTS); // this
>> returns SQL_SUCCESS
>>
>> SQLBindParameter(hstmt, 1 ,SQL_PARAM_OUTPUT, SQL_C_SLONG, SQL_INTEGER, 0,
>> 0, &ProcRetVal, 0, NULL); // this returns SQL_SUCCESS
>> SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_BINARY,
>> SQL_LONGVARBINARY, 0, 0, (SQLPOINTER) 2, 0, &filedata ); // this
>> returns SQL_SUCCESS
>> SQLBindParameter(hstmt, 3 ,SQL_PARAM_INPUT_OUTPUT, SQL_C_SLONG,
>> SQL_INTEGER, 0, 0, &DontWork, 0, NULL); // this returns SQL_SUCCESS
>>
>>         filedata = SQL_LEN_DATA_AT_EXEC(blobsize);
>>         retcode = SQLExecute(hstmt); // this returns SQL_NEED_DATA
>> if (retcode ==  SQL_NEED_DATA)
>>  {
>>             while (retcode ==  SQL_NEED_DATA)
>>     {
>>       retcode = SQLParamData(hstmt, &pToken); // this returns
>> SQL_NEED_DATA on the first pass and then SQL_ERROR on the second pass
>>         extract_error("SQLParamData1"); <-- this does the GetDiagRec call
>> if (retcode ==  SQL_NEED_DATA)
>>  {
>>         while (read data from file)
>>           {
>>     SQLPutData(hstmt, Data, cbData) // this returns SQL_SUCCESS
>>           }
>>
>>        }
>>         }
>>
>>     }
>>
>> SQLNumResultCols (hstmt, &numCols); // this returns SQL_SUCCESS
>> SQLFreeStmt (hstmt, SQL_CLOSE); // this returns SQL_SUCCESS
>>
>> *here is the sproc signature:*
>>
>> CREATE procedure [dbo].[upload_file]
>> @sFileName varchar(50),
>>  @dtFileLastModified datetime,
>> @imgBinary image,
>> @nResultCode int = 0 OUTPUT,
>> AS
>> BEGIN
>> ...
>>
>> *here is the trace:*
>>
>> log.c:190:Starting log file for FreeTDS 0.82
>>         on 2011-08-17 14:40:54 with debug flags 0x4fff.
>> iconv.c:197:names for ISO-8859-1: ISO-8859-1
>> iconv.c:197:names for UTF-8: UTF-8
>> iconv.c:197:names for UCS-2LE: UCS-2LE
>> iconv.c:197:names for UCS-2BE: UCS-2BE
>> iconv.c:363:iconv to convert client-side data to the "ISO-8859-1"
>> character set
>> iconv.c:516:tds_iconv_info_init: converting "ISO-8859-1"->"UCS-2LE"
>> iconv.c:516:tds_iconv_info_init: converting "ISO-8859-1"->"UCS-2LE"
>> net.c:210:Connecting to 10.25.205.124 port 1433 (TDS version 8.0)
>> net.c:264:tds_open_socket: connect(2) returned "Operation now in progress"
>> net.c:303:tds_open_socket() succeeded
>> util.c:162:Changed query state from DEAD to IDLE
>> login.c:735:quietly sending TDS 7+ login packet
>> token.c:312:tds_process_login_tokens()
>> net.c:592:Received header
>> 0000 04 01 01 7d 00 47 01 00-                        |...}.G..|
>>
>> net.c:671:Received packet
>> <snip/>
>> 0120 01 71 00 00 01 16 4d 00-69 00 63 00 72 00 6f 00 |.q....M. i.c.r.o.|
>> 0130 73 00 6f 00 66 00 74 00-20 00 53 00 51 00 4c 00 |s.o.f.t.  .S.Q.L.|
>> 0140 20 00 53 00 65 00 72 00-76 00 65 00 72 00 00 00 | .S.e.r. v.e.r...|
>> 0150 00 00 0a 32 06 40 e3 13-00 04 04 34 00 30 00 39 |...2.@.. ...4.0.9|
>> 0160 00 36 00 04 34 00 30 00-39 00 36 00 fd 00 00 00 |.6..4.0. 9.6.....|
>> 0170 00 00 00 00 00         -                        |.....|
>>
>> token.c:316:looking for login token, got  e3(ENVCHANGE)
>> token.c:108:tds_process_default_tokens() marker is e3(ENVCHANGE)
>> token.c:316:looking for login token, got  ab(INFO)
>> token.c:108:tds_process_default_tokens() marker is ab(INFO)
>> token.c:2451:tds_process_msg() reading message from server
>> token.c:2516:tds_process_msg() calling client msg handler
>> odbc.c:2032:msgno 5701 20003
>> token.c:2529:tds_process_msg() returning TDS_SUCCEED
>> token.c:316:looking for login token, got  e3(ENVCHANGE)
>> token.c:108:tds_process_default_tokens() marker is e3(ENVCHANGE)
>> token.c:2281:tds_process_env_chg(): 5 bytes of collation data received
>> token.c:2282:tds->collation was
>> 0000 00 00 00 00 00         -                        |.....|
>>
>> iconv.c:985:setting server single-byte charset to "CP1252"
>> iconv.c:516:tds_iconv_info_init: converting "ISO-8859-1"->"CP1252"
>> token.c:2292:tds->collation now
>> 0000 09 04 d0 00 34         -                        |....4|
>>
>> token.c:316:looking for login token, got  e3(ENVCHANGE)
>> token.c:108:tds_process_default_tokens() marker is e3(ENVCHANGE)
>> token.c:316:looking for login token, got  ab(INFO)
>> token.c:108:tds_process_default_tokens() marker is ab(INFO)
>> token.c:2451:tds_process_msg() reading message from server
>> token.c:2516:tds_process_msg() calling client msg handler
>> odbc.c:2032:msgno 5703 20003
>> token.c:2529:tds_process_msg() returning TDS_SUCCEED
>> token.c:316:looking for login token, got  ad(LOGINACK)
>> token.c:316:looking for login token, got  e3(ENVCHANGE)
>> token.c:108:tds_process_default_tokens() marker is e3(ENVCHANGE)
>> token.c:316:looking for login token, got  fd(DONE)
>> token.c:108:tds_process_default_tokens() marker is fd(DONE)
>> token.c:2201:tds_process_end: more_results = 0
>>                 was_cancelled = 0
>>                 error = 0
>>                 done_count_valid = 0
>> token.c:2217:tds_process_end() state set to TDS_IDLE
>> token.c:2232:                rows_affected = 0
>> token.c:393:leaving tds_process_login_tokens() returning 1
>> odbc.c:4672:SQLGetFunctions: fFunction is 999
>> odbc.c:5587:SQLGetInfo(0x948c7a8, 77, 0xff9506b8, 20, (nil))
>> odbc.c:4841:_SQLGetInfo(0x948c7a8, 77, 0xff9506b8, 20, (nil)
>> odbc.c:5587:SQLGetInfo(0x948c7a8, 10000, 0xff9506b8, 5, (nil))
>> odbc.c:4841:_SQLGetInfo(0x948c7a8, 10000, 0xff9506b8, 5, (nil)
>> odbc.c:5918:SQLSetConnectOption(0x948c7a8, 0, 1800)
>> odbc.c:5827:_SQLSetConnectAttr(0x948c7a8, 0, 0x708, -3)
>> error.c:609:SQLGetDiagRec(2, 0x948c7a8, 1, 0xff9536e2, 0xff9532bc,
>> 0xff9534e2, 512, 0xff9532b8)
>> error.c:510:_SQLGetDiagRec(2, 0x948c7a8, 1, 0xff9536e2, 0xff9532bc,
>> 0xff9534e2, 512, 0xff9532b8)
>> error.c:609:SQLGetDiagRec(2, 0x948c7a8, 2, 0xff9536e2, 0xff9532bc,
>> 0xff9534e2, 512, 0xff9532b8)
>> error.c:510:_SQLGetDiagRec(2, 0x948c7a8, 2, 0xff9536e2, 0xff9532bc,
>> 0xff9534e2, 512, 0xff9532b8)
>> odbc.c:1504:SQLAllocStmt(0x948c7a8, 0x948e2b8)
>> odbc.c:1403:_SQLAllocStmt(0x948c7a8, 0x948e2b8)
>> odbc.c:4079:SQLGetStmtAttr(0x948dc98, 10010, 0xff9537a4, 4, (nil))
>> odbc.c:3917:_SQLGetStmtAttr(0x948dc98, 10010, 0xff9537a4, 4, (nil))
>> odbc.c:4079:SQLGetStmtAttr(0x948dc98, 10011, 0xff9537a4, 4, (nil))
>> odbc.c:3917:_SQLGetStmtAttr(0x948dc98, 10011, 0xff9537a4, 4, (nil))
>> odbc.c:4079:SQLGetStmtAttr(0x948dc98, 10012, 0xff9537a4, 4, (nil))
>> odbc.c:3917:_SQLGetStmtAttr(0x948dc98, 10012, 0xff9537a4, 4, (nil))
>> odbc.c:4079:SQLGetStmtAttr(0x948dc98, 10013, 0xff9537a4, 4, (nil))
>> odbc.c:3917:_SQLGetStmtAttr(0x948dc98, 10013, 0xff9537a4, 4, (nil))
>> odbc.c:4124:SQLPrepare(0x948dc98,  { ? = call upload_file (
>> 'testfile.txt', '2011-08-17 18:40', ? , ? ) }, -3)
>> odbc.c:1224:SQLBindParameter(0x948dc98, 1, 4, -16, 4, 0, 0, 0xff953978, 0,
>> (nil))
>> odbc.c:1125:_SQLBindParameter(0x948dc98, 1, 4, -16, 4, 0, 0, 0xff953978,
>> 0, (nil))
>> odbc.c:1224:SQLBindParameter(0x948dc98, 2, 1, -2, -4, 0, 0, 0x2, 0,
>> 0xff953984)
>> odbc.c:1125:_SQLBindParameter(0x948dc98, 2, 1, -2, -4, 0, 0, 0x2, 0,
>> 0xff953984)
>> odbc.c:1224:SQLBindParameter(0x948dc98, 3, 2, -16, 4, 0, 0, 0xff953974, 0,
>> (nil))
>> odbc.c:1125:_SQLBindParameter(0x948dc98, 3, 2, -16, 4, 0, 0, 0xff953974,
>> 0, (nil))
>> *odbc.c:3237:SQLExecute(0x948dc98)*
>> *sql2tds.c:150:type=-4*
>> *sql2tds.c:156:trace*
>> *odbc.c:5764:SQLParamData(0x948dc98, 0xff953970)*
>> *odbc.c:5806:SQLPutData(0x948dc98, 0xff94b970, 29)*
>> *odbc.c:5764:SQLParamData(0x948dc98, 0xff953970)*
>> *sql2tds.c:150:type=4*
>> *sql2tds.c:156:trace*
>> *error.c:609:SQLGetDiagRec(3, 0x948dc98, 1, 0xff94b6ce, 0xff94b2a8,
>> 0xff94b4ce, 512, 0xff94b2a4)*
>> *error.c:510:_SQLGetDiagRec(3, 0x948dc98, 1, 0xff94b6ce, 0xff94b2a8,
>> 0xff94b4ce, 512, 0xff94b2a4)*
>> odbc.c:4100:SQLNumResultCols(0x948dc98, 0xff953992)
>> odbc.c:3848:SQLFreeStmt(0x948dc98, 0)
>> odbc.c:3769:_SQLFreeStmt(0x948dc98, 0, 0)
>> error.c:609:SQLGetDiagRec(3, 0x948dc98, 1, 0xff953ad6, 0xff9536b0,
>> 0xff9538d6, 512, 0xff9536ac)
>> error.c:510:_SQLGetDiagRec(3, 0x948dc98, 1, 0xff953ad6, 0xff9536b0,
>> 0xff9538d6, 512, 0xff9536ac)
>> odbc.c:3680:SQLFreeHandle(3, 0x0x948dc98)
>> odbc.c:3769:_SQLFreeStmt(0x948dc98, 1, 0)
>> odbc.c:2005:SQLDisconnect(0x948c7a8)
>> mem.c:563:tds_free_all_results()
>> util.c:162:Changed query state from IDLE to DEAD
>> odbc.c:3680:SQLFreeHandle(2, 0x0x948c7a8)
>> odbc.c:3706:_SQLFreeConnect(0x948c7a8)
>> odbc.c:3680:SQLFreeHandle(1, 0x0x948bbb8)
>> odbc.c:3744:_SQLFreeEnv(0x948bbb8)
>>
>>
>> Thanks for any help you may be able to provide!!
>> -Michel
>>
>>
>>
>>
>
>
> --
> [email protected]
> CEH, CCNA, CCNA Security, Security+, Network+, A+, Project+, MCP, CIW
> Professional/JavaScript Specialist/Database Design Specialist
>



-- 
[email protected]
CEH, CCNA, CCNA Security, Security+, Network+, A+, Project+, MCP, CIW
Professional/JavaScript Specialist/Database Design Specialist
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.