2009-08-05 8 views
0

Ich habe Tabelle Tbl1 ( Somename nvarchar (64) )OLEDB Vergleich Problem nvarchar gegen Ntext (SQLServer 2005)

Über OLEDB Ich versuche SELECT 1 FROM Tbl1 WHERE SomeName = ?

Bindung 3 Zeichen Unicode als Parameter zu wählen Ursachen: DB_E_ERRORSINCOMMAND (0x80040E14L) „die Datentypen nvarchar und ntext- in dem gleich-Operator nicht kompatibel sind“

ich habe bereits versucht folgenden Eingabebindungen:

1) ... 
    currentBind.wType   = DBTYPE_VARIANT; 
    currentBind.cbMaxLen  = 20 
    // where data points to valid VT_BSTR allocated by SysAllocString 
...
2) ... 
    currentBind.wType   = DBTYPE_WSTR; 
    currentBind.cbMaxLen  = 20 
    // where data points to valid VT_BSTR allocated by SysAllocString 
...

in irgendeiner Weise SQLServer treates dieser Parameter als ntext-. Irgendwelche Vorschläge? Vielen Dank im Voraus.

Antwort

1

Schneller und schmutziger Hack: Ändern Sie die Abfrage.

Es sollte wie folgt aussehen:

SELECT 1 FROM Tbl1 WHERE SomeName = cast(? as nvarchar(64)) 

Weiter. Ich würde den Code profilieren, um zu sehen, was Ihr Provider tatsächlich in Bezug auf SQL-Anweisungen generiert. Die Ergebnisse könnten ein wenig Licht auf die Frage werfen, wer sich bei der falschen Eingabe von Parametern schuldig gemacht hat.

+0

Ja, es hilft. SQL Profiler zeigt genau das meine? behandelt als ntext (siehe @ p2 unten): deklarieren @ p1 int gesetzt @ p1 = 21 exec sp_prepexec @ p1 Ausgang, N '@ P1 bigint, @ P2 ntext, @ P3 bigint', N ' – Dewfy

+0

Dann würde ich versuchen Sie entweder den Anbieter zu aktualisieren, wenn möglich (in der Hoffnung, dass es seinen Job besser machen wird), oder bleiben Sie beim "schnellen und schmutzigen Hack". – AlexS

+0

Leider ist der Provider "der große und leistungsstarke" MSSQL Server 2005 native Treiber. – Dewfy