[freetds] Are LOBs supported?

Sebastien FLAESCH sf at 4js.com
Tue Jan 8 12:31:57 EST 2008


It almost works with SQL_LEN_DATA_AT_EXEC(), but still have a little problem
when the size of the LOB is 10000 bytes (I get 2 more unexpected bytes)...

Very strange...

Maybe it's my fault, will check this tomorrow.... But I wonder because the
same code using SQLPutData / SQLGetData works with SQL Server and DB2
without problem.

Thanks.
Seb

Sebastien FLAESCH wrote:
> ZIGLIO, Frediano, VF-IT wrote:
>>> Sebastien FLAESCH wrote:
>>>>     SQLBindParameter(m_hstmt, 2, SQL_PARAM_INPUT,
>>>>                      SQL_C_BINARY,
>>>>                      SQL_LONGVARCHAR, 0x10000000, 0, buf2, 0,
>>>>                      &vind1);
>>>>     CHECK_RCODE(SQL_HANDLE_STMT,m_hstmt,"SQLBindParameter 2");
>>> Note that we have to bind the blob params with a large size 
>>> for SQL Server
>>> drivers, otherwise you can't insert into the database...
>>>
>>> -> get SQLSTATE 07002 "COUNT field incorrect or syntax error" 
>>> ... no idea why.
>>>
>>> Other APIs like DB2 CLI don't need to pass a size in such case.
>>>
>>> Don't know if this matters when using SQL_DATA_AT_EXEC with 
>>> FreeTDS, but
>>> wanted to warn you about this strange thing.
>>>
>>> Note also that we use column-wise binding to fetch rows with:
>>>
>>> SQL_ATTR_ROW_BIND_TYPE, SQL_BIND_BY_COLUMN
>>>
>>> The test does not use this but our driver does, so if you fix 
>>> this problem
>>> I can continue to test with our driver code.
>>>
>>> Thanks!
>>> Seb
>> SQL_DATA_AT_EXEC is not supported. SQLGetInfo report this. Perhaps error
>> from our library is not correct but it's not easy to implement (i'll fix
>> error report ASAP). You can however use SQL_LEN_AT_EXEC witch require a
>> length and which should be even faster.
> 
> Ok will try the SQL_LEN_AT_EXEC way...
> 
>   I noted also that in many
>> examples you bind parameters after SQLPrepare. I would suggest to bind
>> before. In many cases (using many drivers) it's faster.
> 
> Thanks for the tip, but actually we have to do SQLPrepare() before because
> the basic SQL instructions in Informix 4gl are PREPARE, then EXECUTE with
> parameter definition and values:
> 
> PREPARE s1 FROM "INSERT INTO tab VALUES( ?, ?, ? )"  -- SQLPrepare()
> EXECUTE s1 USING var1, var2, var3  -- SQLExecute()
> 
> ...
> 
> 
>   I don't
>> understand how your example works... when does SQLPutData return
>> "done"??
> 
> Yep the sample is not very nice (sorry for that).
> 
> I think the while loop stops because rcode is reset by the line calling SQLParamData().
> 
>   while (rcode == SQL_NEED_DATA) {
> 
> Anyway, thanks a lot for you help.
> I really appreciate.
> 
> Seb
> 
>> freddy77
>> _______________________________________________
>> FreeTDS mailing list
>> FreeTDS at lists.ibiblio.org
>> http://lists.ibiblio.org/mailman/listinfo/freetds
>>
> 
> _______________________________________________
> FreeTDS mailing list
> FreeTDS at lists.ibiblio.org
> http://lists.ibiblio.org/mailman/listinfo/freetds
> 




More information about the FreeTDS mailing list