在以下Microsoft文档中:-
此功能已被删除,建议使用XML。有人这样做吗?我想知道它们的含义,是通过使用XML加载MSDataShape的结构,还是仅使用XML对象?
TIA
答案 0 :(得分:0)
我相信这是指T-SQL的FOR XML子句,它执行与MSDataShape几乎相同的工作,因为它返回层次结构嵌套的数据。
将您的MSDataShape查询移植到FOR XML
查询中,并更改客户端以解析结果,而不是使用MSDataShape OLEDB提供程序。
在客户端,SAX或请求解析最适合以前使用MSDataShape的端口代码(它也具有基于游标的记录移动模型)。
答案 1 :(得分:0)
这是我的一些有用的代码。我的MSDataShape代码仍然有效,因此我建议使用该代码生成XML作为模板,然后使用该代码加载它们:-
Dim objShapeMaker As clsShapeMaker
Dim rsoTemp As ADODB.Recordset
Dim strXMLTemplate As String
' Template file
strXMLTemplate = "C:\Temp\Template_GI.xml"
' Create the MSDataShape and save it to XML
Set rsoTemp = objShapeMaker.CreateGI()
rsoTemp.Save strXMLTemplate, adPersistXML
' Now we have the XML in a file going forward, load it in my recordset
Set rsoTemp = New ADODB.Recordset
rsoTemp.Open strXMLTemplate, , , , adCmdFile
' Cleanup
Set rsoTemp = Nothing
Set objShapeMaker = Nothing
如果您不喜欢生成要维护的XML模板文件的想法,则可以通过.NET进行操作,并将其公开给COM以供您在VB6 / VBA应用程序中使用,如here所述。
我已经开发了一个.NET应用程序,可以在任何人想要前进的情况下通过简单的代码行生成这些XML文件,类似于列出的博客,但是它处理具有关系的子记录集。
编辑1 :如果您设置了架构而没有返回数据,则此方法非常有用。据我所知,要有效地填充这些,最好先编写代码以加载结构,然后再从单独的记录集填充它(这很慢!)
编辑2 :这是我们在.NET Interop中采用的替代方法。最初着眼于从SQL引入XML并根据需要对其进行解析。可以将其购回DataSet,也可以将其解析为目标记录集,但是结果数据集中表之间的关系需要在代码中设置,而不是在T-SQL中使用XML输出的位置。>