2009-08-05 17 views
0

私はOLEDBにわたりテーブルTBL1( somenameののデータ型はnvarchar(64) )OLEDB比較問題のデータ型はnvarchar(のSQLServer 2005)

を持っている私は、パラメータとして3文字のユニコードを結合 SELECT 1 FROM Tbl1 WHERE SomeName = ?

を選択しようとしています原因: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プロファイラには、 @ p1 int set @p1 = 21 exec sp_prepexec @ p1出力、N '@ P1 bigint、@ P2 ntext、@ P3 bigint'、N ' – Dewfy

+0

それから、ntextとして扱われます(@ p2を参照)。可能であればプロバイダを更新するか(それがその仕事をよりうまくやってくれることを期待して)、「迅速かつ汚れたハック」に固執してください。 – AlexS

+0

残念ながら、プロバイダは "偉大かつ強力な" MSSQL Server 2005のネイティブドライバです。 – Dewfy

関連する問題