Ian*_*oyd 7 xml delphi sql-server-2005 ado delphi-5
我使用ADO和一个"原生"的驱动程序(例如SQLNCLI,SQLNCLI10,SQLNCLI11),以连接到SQL Server(而不是传统SQLOLEDB驱动程序).
ADO不了解XML本机驱动程序公开的SQL Server数据类型:
field: ADOField;
field := recordset.Fields.Items["SomeXmlColumn"];
Run Code Online (Sandbox Code Playgroud)
试图访问field.Value投掷EOleException:
所述本地客户端驱动程序(例如SQLNCLI,SQLNCLI10,SQLNCLI11)呈现Xml数据类型ADO作为
field.Type_ = 141 //???
Run Code Online (Sandbox Code Playgroud)
旧版SQLOLEDB驱动程序将Xml数据类型作为adLongVarWChar呈现给ADO ,这是一个unicode字符串:
field.Type_ = 203 //adLongVarWChar
Run Code Online (Sandbox Code Playgroud)
所VARIANT包含的field.Value是WideString(技术上称为a BSTR):
TVarData(field.Value).vtype = 8 //VT_BSTR
Run Code Online (Sandbox Code Playgroud)
在我看来,这是ADO(Windows 7 SP1)中的一个错误,而不是我可以解决的问题.
我该如何解决?
RRU*_*RUZ 10
在MSDN文档说:
为了使ADO能够使用最新版本的SQL Server的新功能,对SQL Server Native Client OLE DB提供程序进行了一些增强,扩展了OLE DB的核心功能.这些增强功能允许ADO应用程序使用较新的SQL Server功能并使用SQL Server 2005中引入的两种数据类型:xml和 udt.这些增强功能还利用了varchar, nvarchar和 varbinary的数据类型.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
Run Code Online (Sandbox Code Playgroud)
指定要使用的数据类型处理模式.提供者数据类型的识别值为"0",SQL Server 2000数据类型的识别值为"80".
| 归档时间: |
|
| 查看次数: |
1470 次 |
| 最近记录: |