[freetds] Sending dbnumeric in dbrpcparam

Damien Churchill damoxc at gmail.com
Tue Jun 2 04:55:28 EDT 2009


2009/6/2 James K. Lowden <jklowden at freetds.org>:
> Damien Churchill wrote:
>> >> Here is the code that I've tried: http://pastebin.com/f69a761d7
>> >
>> > http://manuals.sybase.com/onlinebooks/group-cnarc/cng1110e/dblib/@Generic__BookTextView/34413;pt=39614
>> >
>> >        "The value of type indicates the datatype of *value. See
>> > "Types" for more information. For types that have no C equivalent,
>> > such as SYBDATETIME, SYBMONEY, SYBNUMERIC, or SYBDECIMAL, use
>> > dbconvert_ps to initialize *value."
>>
>> Hmm, I gave this a try and it still fails with the same error.
>
> Um, that's not possible?  The advice is to convert your numeric value to a
> "known" type -- a C string, say -- and bind your parameter to that
> (intermediate) buffer.  Line 63 becomes:
>
> ret = dbrpcparam(dbproc, "@idecimal", 0, SYBCHAR, -1, strlen(tmp), (BYTE
> *)tmp);
>
> At that point, it's just a plain-vanilla RPC call.

Ah this does work, thanks!

>
>> Would this only work with Sybase perhaps?
>
> It should work regardless of TDS protocol.  The server interaction is
> different, but the API (and its limitations) are the same.
>
> FWIW, there's no technical reason dbrpcparam couldn't deal directly with
> these types.  It's not specified by the vendors, but it's a reasonable
> extension.  In case you want to try your hand at it.
>

Do you mean that freetds currently does not support sending these types?

Damien



More information about the FreeTDS mailing list