Skip to Content.
Sympa Menu

freetds - RE: [freetds] Problem with data type conversions and FreeTDS

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: "ZIGLIO Frediano" <Frediano.Ziglio AT vodafone.com>
  • To: "FreeTDS Development Group" <freetds AT lists.ibiblio.org>
  • Subject: RE: [freetds] Problem with data type conversions and FreeTDS
  • Date: Wed, 30 Jul 2003 15:27:06 +0200

>
> Hi all,
>

Hi!

> I had a friend create a table on his M$ SQL server 2000 with
> just one row and as many columns as data types. He filled
> each field with a different value corresponding to data type. E.g.
>
> bigint, bit, char, datetime, float, money, nvarchar, unique
> 1111119,1,c,30/04/2003 13:00:19,23.45, 123.45, hello,
> {F44A-etc-...blah}
>
> Note the Unique identifier in the above example is not the
> real value I just couldn't be bothered to write it out in full!
>
> Anyway using the code snippet below works great except when
> trying to convert and print the unique ID. What should I be
> doing to allow all data types to be printed successfully as
> with tsql and sqsh?
>
> <snip>
>

Wow... C++ !!!

> const string& tds::connection::print_field (const int &column) {

string tds::connection::print_field (const int column) {
(return value, not input reference)

> static string str;

string str;
??? why static ???

> unsigned char *row = results->current_row;
> const int type = results->columns[column]->column_type;
> const int offset = results->columns[column]->column_offset;
> const int size = results->columns[column]->column_cur_size;
> const int conversion_type = tds_get_conversion_type (type, size);
>
> str.clear ();
>

remove str.clear(); line

> if (tds_get_null (const_cast <unsigned char *> (row), column))

row is already unsigned char *, cast unneeded

> str = "NULL";
> else {
> CONV_RESULT convert;
> unsigned char *value = &(row[offset]);
>
> if (is_blob_type (type))
> value = (unsigned char*) ((TDSBLOBINFO *) value)->textvalue;
>
> if (tds_convert (context, conversion_type, (TDS_CHAR
> *) value,
> size, SYBVARCHAR, &convert) < 0)
> throw tds::error ("Failed to convert row type at
> column.");
>

Seem correct...

> str = convert.c;
> free (convert.c);
> }
>
> return str;
> }
>
> </snip>
>
> I have tried printing both the C++ tds::string and the
> converted value* both fail.
>
> Can anyone help! Plleasse!!
>

What version of FreeTDS are you using ??

> Many thanks
>
> James Vanns
>

freddy77




Archive powered by MHonArc 2.6.24.

Top of Page