【问题标题】:OLEDB comparison problem nvarchar against ntext (SQLServer 2005)OLEDB 比较问题 nvarchar 与 ntext (SQLServer 2005)
【发布时间】:2009-08-06 02:39:38
【问题描述】:

我有表 Tbl1( SomeName nvarchar(64) )

在 OLEDB 上,我正在尝试选择 SELECT 1 FROM Tbl1 WHERE SomeName = ?

binding 3 character unicode as parameter 导致:DB_E_ERRORSINCOMMAND(0x80040E14L) "The data types nvarchar and ntext are in compatible in the equal to operator"

我已经尝试过以下输入绑定:

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。 有什么建议么?提前谢谢你。

【问题讨论】:

    标签: sql-server oledb nvarchar ntext


    【解决方案1】:

    快速而肮脏的 hack:更改查询。

    应该是这样的:

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

    接下来。我会分析代码以查看您的提供程序在 SQL 语句方面实​​际生成了什么。结果可能会揭示谁在错误的参数输入方面有罪的问题。

    【讨论】:

    • 是的,它有帮助。 SQL Profiler 准确地显示了我的 ?被视为ntext(见@p2 波纹管):声明@p1 int set @p1=21 exec sp_prepexec @p1 output,N'@P1 bigint,@P2 ntext,@P3 bigint',N'
    • 然后,如果可能的话,我会尝试更新提供程序(希望它会做得更好)或坚持“快速而肮脏的黑客”。
    • 不幸的是,提供者是“伟大而强大”的 MSSQL Server 2005 原生驱动程序。
    猜你喜欢
    • 1970-01-01
    • 2010-09-12
    • 2011-01-09
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多