Re: Question about FreeTDS, DBD::ODBC and bind parameters with prepar ed statements

"James K. Lowden" <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Message-ID <[email protected]>
[email protected] 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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.