[freetds] FreeTDS problems with converting SQL BigInt
khichdo at yahoo.com
Fri Sep 20 19:05:32 EDT 2013
Some more information.
1) I changed my program to read the value as a double, then cast it to bigint. In this case it works.
2) I ran tcpdump and captured a network trace. I looked at it in wireshark, and noticed that the server is sending the correct value...
0040 c8 31 04 00 10 00 00 49 01 00 81 01 00 00 00 21 .1.....I .......!
0050 00 6c 11 13 00 0d 4d 00 61 00 78 00 49 00 50 00 .l....M. a.x.I.P.
0060 50 00 51 00 75 00 65 00 75 00 65 00 49 00 44 00 P.Q.u.e. u.e.I.D.
0070 d1 05 01 4c 47 07 00 ff 01 00 c1 00 01 00 00 00 ...LG... ........
At offset 76, you can see the value 0x000747c which is exactly the value the sproc is sending for MaxIPPQueueID ( decimal 477004 ).
I just started reading the MS-TDS spec, and am not an expert in it, so I dont know what datatype the server is advertizing. But I am wondering why the library is corrupting this value.
From: Igor Korot <ikorot01 at gmail.com>
To: Feroze Daud <khichdo at yahoo.com>; FreeTDS Development Group <freetds at lists.ibiblio.org>
Sent: Thursday, September 19, 2013 12:13 PM
Subject: Re: [freetds] FreeTDS problems with converting SQL BigInt
What is you Server version?
On Thu, Sep 19, 2013 at 11:29 AM, Feroze Daud <khichdo at yahoo.com> wrote:
we are using TDS protocol version 8. Should we be using something else?
>here is our connection string...
>Initializing processing with connection string:DRIVER=FreeTDS;Server=<snip>;UID=<snip>;PWD=<snip>;Database=<snip>;TDS_Version=8.0;Port=1433
> From: Frediano Ziglio <freddy77 at gmail.com>
>To: Feroze Daud <khichdo at yahoo.com>; FreeTDS Development Group <freetds at lists.ibiblio.org>
>Sent: Thursday, September 19, 2013 11:09 AM
>Subject: Re: [freetds] FreeTDS problems with converting SQL BigInt
>2013/9/19 Feroze Daud <khichdo at yahoo.com>:
>> So, I enabled logging for my application. This is what it shows me for the column that is being corrupted.
>> token.c:526:processing result tokens. marker is 81(TDS7_RESULT)
>> token.c:1472:processing TDS7 result. set current_results to tds->res_info
>> read.c:179:tds_get_string: reading 20 from wire to give 10 to client.
>> colname = MaxQueueID (10 bytes)
>> type = 108 (numeric)
>> server's type = 108 (numeric)
>> column_varint_size = 1
>> column_size = 17 (17 on server)
>> Does this mean that the TDS stream that is being read by freetds is advertizing the column as numeric?
>No, it means the server is returning the number as numeric. Are you
>sure you are using proper protocol version?
>> Is there any way to have tdslog print out the value of the column that it is reading from the socket?
>If you can read binary yes, just turn network data dump on.
>> ----- Original Message -----
>> From: James K. Lowden <jklowden at freetds.org>
>> To: freetds at lists.ibiblio.org
>> Cc: Feroze Daud <khichdo at yahoo.com>; FreeTDS Development Group <freetds at lists.ibiblio.org>
>> Sent: Wednesday, September 18, 2013 6:32 PM
>> Subject: Re: [freetds] FreeTDS problems with converting SQL BigInt
>> On Wed, 18 Sep 2013 13:03:50 -0700 (PDT)
>> Feroze Daud <khichdo at yahoo.com> wrote:
>>> Thanks. Unfortunately, I need to get the output parameter first, so I
>>> changed the sproc to return the value as a resultset, instead of an
>>> output parameter.
>> As Frediano mentioned, the server sends the output parameter after any
>> ROW packets. FreeTDS makes the data available to the application as
>> they arrive from the server.
>>> This brings me to the original problem. I am getting garbage values
>>> out of call to getBigInteger.
>> What does src/odbc/unittests/genparams show on your machine regarding
>> the BIGINT type?
>>> Is there any way to enable Freetds logging for applications that dont
>>> go through the odbc driver manager?
>> Cf. TDSDUMP in the user guide.
>> P.S. Top-posting reduces the value of the email archive by making it
>> harder to follow the thread.
>> FreeTDS mailing list
>> FreeTDS at lists.ibiblio.org
>FreeTDS mailing list
>FreeTDS at lists.ibiblio.org
More information about the FreeTDS