2009-08-05 7 views
0

J'ai la table Tbl1 ( UnNom nvarchar (64) )problème de comparaison OLEDB nvarchar contre ntext (SQLServer 2005)

Plus OLEDB Je suis en train de sélectionner SELECT 1 FROM Tbl1 WHERE SomeName = ?

fixation 3 caractères unicode en tant que paramètre Causes: DB_E_ERRORSINCOMMAND (0x80040E14L) « les types de données nvarchar et ntext sont incompatibles dans l'opérateur Egal à »

J'ai déjà essayé suivant les liaisons d'entrée:

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 
...

En tout treates SQLServer façon dont ce paramètre ntext. Des suggestions? Merci d'avance.

Répondre

1

Rapide et sale bidouille: changez la requête.

Il devrait ressembler à ceci:

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

Suivant. Je profilerais le code pour voir ce que le fournisseur génère réellement en termes d'instructions SQL. Les résultats pourraient jeter un peu de lumière sur la question de savoir qui est coupable d'un mauvais typage de paramètre.

+0

Oui, ça aide. SQL Profiler montre exactement cela? traité comme ntext (voir @ p2 ci-dessous): declare @ p1 int set @ p1 = 21 exec sp_prepexec @ p1 sortie, N '@ P1 bigint, @ P2 ntext, @ P3 bigint', N ' – Dewfy

+0

Puis-je essayez de mettre à jour le fournisseur si possible (en espérant qu'il fera mieux son travail) ou de vous en tenir au 'hack rapide et sale'. – AlexS

+0

Malheureusement, le fournisseur est le pilote natif MSSQL Server 2005 "le plus grand et le plus puissant". – Dewfy

Questions connexes