Alfred,

Thank you for coming back here to let us know how you got on and the resolution. The answer you got from Microsoft is very interesting and it is certainly worth remembering the workaround.

Martin
--
Martin J. Evans
Easysoft Limited
http://www.easysoft.com

Mickautsch, Alfred wrote:
Hallo,

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: INSERTing strings containing '\<LF>' or '\<CR><LF>' into the database

Result:
Query succeeds but the Backslash and the following <LF> or <CR><LF> are removed 
from the string

Cause: The T-SQL string parser removes these characters due to a parser artefact. Resolution: 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: [EMAIL PROTECTED]


-----Ursprüngliche Nachricht-----
Von: Martin Evans [mailto:[EMAIL PROTECTED]
Gesendet: Dienstag, 30. Januar 2007 15:54
An: [email protected]
Betreff: Re: CLOB Problem with DBD::ODBC/DBD::ADO for SQL Server


Mickautsch, Alfred wrote:
-----Ursprüngliche Nachricht-----
Von: Martin Evans [mailto:[EMAIL PROTECTED]
Gesendet: Dienstag, 30. Januar 2007 12:40
An: [email protected]
Betreff: Re: AW: AW: Re: AW: CLOB Problem with
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
100% sure the
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 going through fine in both directions.
[...]

Yes, it is a weird problem. There seems to be a byte count
limit under which this effect does not occur. It happens with my text example of 102858 bytes. With a text of 569 bytes it does not seem to happen. It is very confusing.
Thank you for your efforts.

Servus -- Alfred
As you indicate, the length has something to do with it. At 24000 chrs it works and at 48000 chrs you lose each \ followed by a <linefeed>. It is of no consolation to you but I have duplicated it with the MS SQL Server driver and also demonstrated it works fine with our sql server driver. There is a difference. The MS SQL Server driver execs sp_execute to do the insert with the literal text whilst our driver calls sp_execute with a parameter.

I had thought turning off translation might help but it doesn't.

I am of the opinion this may be a ms sql server odbc driver bug in which your options are limited unless you have a support contract or can come up with a workaround.

Martin
--
Martin J. Evans
Easysoft Limited
http://www.easysoft.com


SCHULER Business Solutions AG Aktiengesellschaft mit Sitz in D-72285 Pfalzgrafenweiler, Karl-Berner-Straße 4 Registergericht Stuttgart HRB 430947
Vorstand: Uwe Jonas, Harald Sieber
Vorsitzender des Aufsichtsrates: Gerhard Schuler

Reply via email to