不推荐使用MSDatashape

时间:2018-10-09 19:20:47

标签: vb6 ado recordset

在以下Microsoft文档中:-

https://docs.microsoft.com/en-us/sql/ado/guide/appendixes/microsoft-data-shaping-service-for-ole-db-ado-service-provider?view=sql-server-2017

此功能已被删除,建议使用XML。有人这样做吗?我想知道它们的含义,是通过使用XML加载MSDataShape的结构,还是仅使用XML对象?

TIA

2 个答案:

答案 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输出的位置。