【问题标题】:ADO cannot access SQL Server XML type column using native client (SQLNCLI)ADO 无法使用本机客户端 (SQLNCLI) 访问 SQL Server XML 类型列
【发布时间】:2013-10-02 14:01:09
【问题描述】:

我正在使用 ADO,以及其中一个“native” 驱动程序(例如SQLNCLISQLNCLI10SQLNCLI11)连接到 SQL Server(而不是旧的 SQLOLEDB司机)。

ADO 不理解本机驱动程序公开的XML SQL Server 数据类型:

field: ADOField;

field := recordset.Fields.Items["SomeXmlColumn"];

尝试访问field.Value 会抛出EOleException

  • 来源:微软光标引擎
  • 错误代码: 0x80040E21 (E_ITF_0E21)
  • 消息:多步操作产生错误。检查每个状态值

本机客户端驱动程序(例如SQLNCLISQLNCLI10SQLNCLI11)向 ADO 提供 Xml 数据类型为

field.Type_ = 141 //???

虽然旧版 SQLOLEDB 驱动程序向 ADO 提供 Xml 数据类型为 adLongVarWChar,但它是一个 unicode 字符串:

field.Type_ = 203 //adLongVarWChar

field.Value 中包含的VARIANTWideString (technically known as a BSTR)

TVarData(field.Value).vtype = 8 //VT_BSTR

在我看来,这是 ADO(Windows 7 SP1)中的一个错误,我无法修复。

我该如何解决?

阅读奖励

【问题讨论】:

  • 您是否尝试将DataTypeCompatibility 关键字添加到连接字符串?
  • 用答案的形式表达出来,RRUZ,你自己就接受了。 (因为我有,它修复了它)。我将在堆栈溢出的所有其他问题上窃取信用,当使用 ADO 和 SQL Server 时有人得到0x80040E21

标签: xml delphi sql-server-2005 ado delphi-5


【解决方案1】:

MSDN documentation

要使 ADO 能够使用 SQL Server 最新版本的新功能, 对 SQL Server Native Client OLE 进行了一些增强 扩展 OLE DB 核心功能的 DB 提供程序。这些 增强功能允许 ADO 应用程序使用更新的 SQL Server 功能 并使用 SQL Server 2005 中引入的两种数据类型:xmludt。这些增强功能还利用了对 varchar 的增强功能, nvarcharvarbinary 数据类型。 SQL Server Native Client 添加了 SSPROP_INIT_DATATYPECOMPATIBILITY 初始化属性到 DBPROPSET_SQLSERVERDBINIT 属性集供 ADO 应用程序使用,因此 新数据类型以与 ADO 兼容的方式公开。在 此外,SQL Server Native Client OLE DB 提供程序还定义了一个 设置的名为 DataTypeCompatibility 的新连接字符串关键字 在连接字符串中。

因此,要在 Native Client 中启用新的 SQL Server 功能,您需要在连接字符串中添加以下关键字:

Provider=SQLNCLI11
DataTypeCompatibility=80

DataTypeCompatibility:

指定要使用的数据类型处理模式。对于提供程序数据类型,识别值为“0”,对于 SQL Server 2000 数据类型,识别值为“80”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    相关资源
    最近更新 更多