Skip to Content.
Sympa Menu

freetds - Re: [freetds] Question about FreeTDS, DBD::ODBC and bind parameters with prepar ed statements

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: "James K. Lowden" <jklowden AT freetds.org>
  • To: FreeTDS Development Group <freetds AT lists.ibiblio.org>
  • Subject: Re: [freetds] Question about FreeTDS, DBD::ODBC and bind parameters with prepar ed statements
  • Date: Tue, 5 May 2009 00:06:58 -0400

Will.Saxon AT sage.com wrote:
> If I try to prepare a statement containing placeholders for fields with
> a binary datatype, I get the following error:
>
> DBD::ODBC::db prepare failed: [unixODBC][FreeTDS][SQL
> Server]Statement(s) could not be prepared. (SQL-42000)
> [unixODBC][FreeTDS][SQL Server]Implicit conversion from data type
> varchar to binary is not allowed. Use the CONVERT function to run this
> query. (SQL-22018)(DBD: st_prepare/SQLPrepare err=-1)
>
> The documentation for DBD::ODBC suggests that this can happen if the
> driver does not support SQLDescribeParam. In these cases a default
> parameter type of SQL_VARCHAR is used.

$ grep SQLDescribeParam doc/api_status.txt
odbc (all) SQLDescribeParam unimplemented

> As far as I know
> the only way to get placeholder support in prepared statements with
> FreeTDS and DBI is DBD::ODBC, is that correct?

Yes.

> Is this supposed to work, i.e. am I just 'doing it wrong'?

http://msdn.microsoft.com/en-us/library/ms716298(VS.85).aspx

I don't know if it's supposed to work. When you say "placeholders for
fields with a binary datatype", do you mean the SQL datatype is BINARY as
in http://msdn.microsoft.com/en-us/library/aa225972(SQL.80).aspx? If so,
no implicit conversion is available, and Perl must be persuaded to bind
the parameter with a vartype of SQL_C_BINARY, too.

When I'm trying to understand what DBD::ODBC is doing, I set the DBI trace
to 3 or 4 and TDSDUMP=stderr (or stdout, following DBI), so that I get an
intermingled dump of DBI and FreeTDS activity. Then I can see the
functions being called and (with luck) what they're doing.

It might be that binary parameters aren't supported by the FreeTDS ODBC
driver. I would think they are, though.

I would try with samples/odbc_rpc.pl. If that's no help, perhaps
src/odbc/unittests/prepare_results.c can be modified to prove the case one
way or the other.

HTH.

--jkl






Archive powered by MHonArc 2.6.24.

Top of Page