我使用ADO和“本地”驱动程序之一(例如SQLNCLI、SQLNCLI10、SQLNCLI11)连接到Server (而不是传统的SQLOLEDB驱动程序)。
ADO不理解本机驱动程序公开的XML Server数据类型:
field: ADOField;
field := recordset.Fields.Items["SomeXmlColumn"];试图访问field.Value会引发EOleException
本机客户端驱动程序(例如SQLNCLI、SQLNCLI10、SQLNCLI11)将Xml数据类型显示为
field.Type_ = 141 //???当遗留的SQLOLEDB驱动程序将Xml数据类型以adLongVarWChar的形式呈现给ADO时,一个unicode字符串:
field.Type_ = 203 //adLongVarWChar而包含在VARIANT中的field.Value是一个)
TVarData(field.Value).vtype = 8 //VT_BSTR在我看来,这是ADO (Windows7 SP1)中的一个bug,而不是我能修复的东西。
我怎么才能修好它?
奖金阅读
发布于 2013-10-02 15:24:54
MSDN文档说
为了使ADO能够使用最新版本的SQL Server的新功能,对扩展OLE核心功能的SQL Server本机客户端OLE DB提供程序进行了一些增强。这些增强允许ADO应用程序使用更新的Server功能,并使用Server 2005中引入的两种数据类型:xml和udt。这些增强还利用了对varchar、nvarchar和varbinary数据类型的增强。Server本机客户端将SSPROP_INIT_DATATYPECOMPATIBILITY初始化属性添加到DBPROPSET_SQLSERVERDBINIT属性集中,以供ADO应用程序使用,以便以与ADO兼容的方式公开新的数据类型。此外,Server本机客户端OLE DB提供程序还定义了在连接字符串中设置的名为DataTypeCompatibility的新连接字符串关键字。
因此,要在本机客户端中启用新的Server功能,需要在连接字符串中添加以下关键字:
Provider=SQLNCLI11
DataTypeCompatibility=80其中DataTypeCompatibility
指定要使用的数据类型处理模式。对于提供程序数据类型,识别值为"0“,对于Server 2000数据类型,识别值为"80”。
https://stackoverflow.com/questions/19138781
复制相似问题