AW: CLOB Problem with DBD::ODBC/DBD::ADO for SQL Server
am 28.02.2007 14:52:37 von alfred.mickautschHallo,
I got a solution for this problem so I thought you might be interested =
to hear it.
At Martin's advice I called Microsoft and Hans Lindgren from Microsoft =
Product Support confirmed the bug and found a workaround. I got the the =
OK from Hans Lindgren to post the summary of the case to the list, so =
here it is:
---
Action: =20
INSERTing strings containing '\
=20
Result:
Query succeeds but the Backslash and the following
removed from the string
=20
Cause: =20
The T-SQL string parser removes these characters due to a parser =
artefact.=20
=20
Resolution:=20
Parameters passed using RPC (remote procedure calls) are not parsed in =
the same way as strings used in T-SQL. Altering the INSERTion behaviour =
to use RPC avoids this issue (in this case the work around is to create =
a SP that handles the insert and to call it using RPC).
---
Besides the Microsoft case I did my own debugging and found out, that =
the bug does only occur when the data is sent to SQL Server with =
SQL_DATA_AT_EXEC and SQLParamData/SQLPutData. But this was not confirmed =
by Microsoft so I cannot guarantee that this works so in all cases. =
Nevertheless it works for me.
Servus -- Alfred
--
Alfred Mickautsch
Schuler Business Solutions AG
Karl-Berner-Str. 4
D-72285 Pfalzgrafenweiler
tel: +49 (0)74 45 830-184
fax: +49 (0)74 45 830-349
e-mail: alfred.mickautsch@schuler-ag.com
> -----Ursprüngliche Nachricht-----
> Von: Martin Evans [mailto:martin.evans@easysoft.com]
> Gesendet: Dienstag, 30. Januar 2007 15:54
> An: dbi-users@perl.org
> Betreff: Re: CLOB Problem with DBD::ODBC/DBD::ADO for SQL Server
>=20
>=20
> Mickautsch, Alfred wrote:
> >> -----Ursprüngliche Nachricht-----
> >> Von: Martin Evans [mailto:martin.evans@easysoft.com]
> >> Gesendet: Dienstag, 30. Januar 2007 12:40
> >> An: dbi-users@perl.org
> >> Betreff: Re: AW: AW: Re: AW: CLOB Problem with=20
> DBD::ODBC/DBD::ADO for
> >> SQL Server
> > [...]
> >> I insert 24 chars (16 \ and 8 line feeds) and I get back 24 chrs.
> >>
> >> I am unsure why the code does not insert CR\LF as I am=20
> 100% sure the=20
> >> file itself contains CR\LF.
> >>
> >> I have tried with ntext, text and char fields - no difference.
> >>
> >> I have run it through a tds spy and can see the line feeds=20
> >> going through=20
> >> fine in both directions.
> > [...]
> >=20
> > Yes, it is a weird problem. There seems to be a byte count=20
> limit under which this effect does not occur. It happens with=20
> my text example of 102858 bytes. With a text of 569 bytes it=20
> does not seem to happen. It is very confusing.
> >=20
> > Thank you for your efforts.
> >=20
> > Servus -- Alfred
>=20
> As you indicate, the length has something to do with it. At=20
> 24000 chrs=20
> it works and at 48000 chrs you lose each \ followed by a=20
>
> is of no consolation to you but I have duplicated it with the MS SQL=20
> Server driver and also demonstrated it works fine with our sql server=20
> driver. There is a difference. The MS SQL Server driver execs=20
> sp_execute=20
> to do the insert with the literal text whilst our driver calls=20
> sp_execute with a parameter.
>=20
> I had thought turning off translation might help but it doesn't.
>=20
> I am of the opinion this may be a ms sql server odbc driver=20
> bug in which=20
> your options are limited unless you have a support contract=20
> or can come=20
> up with a workaround.
>=20
> Martin
> --=20
> Martin J. Evans
> Easysoft Limited
> http://www.easysoft.com
>=20
SCHULER Business Solutions AG=20
Aktiengesellschaft mit Sitz in D-72285 Pfalzgrafenweiler, =
Karl-Berner-Straße 4=20
Registergericht Stuttgart HRB 430947
Vorstand: Uwe Jonas, Harald Sieber
Vorsitzender des Aufsichtsrates: Gerhard Schuler=20