[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