2009-08-05 2 views
0

나는 테이블 TBL1 ( SomeName의 NVARCHAR이 (64) ) OLEDB 이상OLEDB 비교 문제 NVARCHAR (SQLServer를 2005)

내가 SELECT 1 FROM Tbl1 WHERE SomeName = ?

가 매개 변수로 3 문자의 유니 코드를 바인딩을 선택하는 것을 시도하고있다 원인 : DB_E_ERRORSINCOMMAND (0x80040E14L)

"데이터 유형 및 NVARCHAR NTEXT 연산자에 동일의 양립"I 이미 입력 바인딩 다음 시도 :

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

어떤 식 으로든 SQLServer는이 매개 변수를 ntext로 처리합니다. 제안 사항이 있으십니까? 미리 감사드립니다.

답변

1

빠르고 더러운 해킹 : 검색어를 변경하십시오.

은 다음과 같아야합니다

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

다음을. 공급자가 SQL 문과 관련하여 실제로 무엇을 생성하는지 보려면 코드를 프로파일 링합니다. 그 결과는 틀린 매개 변수 타이핑에서 누가 유죄인지에 대한 질문에 빛을 줄 수 있습니다.

+0

네 도움이됩니다. SQL 프로파일 러는 정확하게 내? 선언 @ p1 int set @p1 = 21 exec sp_prepexec @ p1 출력, N '@ P1 bigint, @ P2 ntext, @ P3 bigint', N ' – Dewfy

+0

그런 다음 가능하다면 공급자를 업데이트하거나 (더 나은 일을하기를 바랄 때) '빠르고 더러운 해킹'을 고수하십시오. – AlexS

+0

불행히도 공급자는 "강력하고 위력있는"MSSQL Server 2005 네이티브 드라이버입니다. – Dewfy