2009-08-05 99 views
0

我有表TBL( SomeName爲nvarchar(64) )OLEDB比較問題nvarchar的反對NTEXT(SQLServer的2005)

在OLEDB我想選擇 SELECT 1 FROM Tbl1 WHERE SomeName = ?

結合3的Unicode字符作爲參數原因:DB_E_ERRORSINCOMMAND(0x80040E14L)「爲nvarchar的數據類型和ntext是在等於操作者不兼容的」

我已經嘗試以下輸入綁定:

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 Profiler正好顯示我的?作爲ntext處理(參見@ p2波紋管): declare @ p1 int set @ p1 = 21 exec sp_prepexec @ p1輸出,N'@ P1 bigint,@ P2 ntext,@ P3 bigint',N' – Dewfy 2009-08-05 17:05:31