【发布时间】:2013-10-02 14:01:09
【问题描述】:
我正在使用 ADO,以及其中一个“native” 驱动程序(例如SQLNCLI、SQLNCLI10、SQLNCLI11)连接到 SQL Server(而不是旧的 SQLOLEDB司机)。
ADO 不理解本机驱动程序公开的XML SQL Server 数据类型:
field: ADOField;
field := recordset.Fields.Items["SomeXmlColumn"];
尝试访问field.Value 会抛出EOleException:
- 来源:微软光标引擎
- 错误代码: 0x80040E21 (E_ITF_0E21)
- 消息:多步操作产生错误。检查每个状态值
本机客户端驱动程序(例如SQLNCLI、SQLNCLI10、SQLNCLI11)向 ADO 提供 Xml 数据类型为
field.Type_ = 141 //???
虽然旧版 SQLOLEDB 驱动程序向 ADO 提供 Xml 数据类型为 adLongVarWChar,但它是一个 unicode 字符串:
field.Type_ = 203 //adLongVarWChar
而field.Value 中包含的VARIANT 是WideString (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