在Microsoft Office中使用ADO.NET4

时间:2010-01-30 09:36:52  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:eName(String 值) 从 XML Web Service 返回的 XML 中使用的唯一表名称。   注意:此参数(例如 XML)区分大小写。   bReturnFieldHeaders(Boolean 值) 如果字段名作为数组中的第一行被返回则为 True。        此例程相当长,但是有一定的原因。最初,我曾把此函数拆分为三个独立的函数。但是我发现,由于读取整个...
  正文:该 ParseDataSet 函数要求三个参数:
  
  参数 说明
  xdlXSDFromSoapClient(IXMLDOMNodeList 对象) 从 SoapClient30 对象中返回的 IXMLDOMNodeList 对象如本文前面章节中所述。
  sTableName(String 值) 从 XML Web Service 返回的 XML 中使用的唯一表名称。
  注意:此参数(例如 XML)区分大小写。
  bReturnFieldHeaders(Boolean 值) 如果字段名作为数组中的第一行被返回则为 True。
  
    此例程相当长,但是有一定的原因。最初,我曾把此函数拆分为三个独立的函数。但是我发现,由于读取整个 XML 文档对象模型 (DOM) 需要循环很多次,因此从函数外部进行调用时性能会受到影响。基于这一原因,将内联的所有代码集中在一个函数中会更加合理。这与使用独立的函数相比,可以将性能提高大约三倍。
  
    如果您曾经分析过 XML,那么当您查看 ParseDataSet 函数的代码时便会发现,这些代码类似于 MSXML 分析器。例程的第一部分会通过 XML 架构,以获取 ADO.NET 数据集的字段名和数据类型。如果程序已选择在数组的第一行中返回字段名,此信息将非常重要。它还可以用于将 XML 字符串数据转换为相应的 vbA 数据类型。
  
    代码的第二部分实际将按记录逐个读取 XML DOM,向数组中提取数据。在代码的最后部分,您会发现一个很长的 Select Case 语句。这个 Select Case 语句将从 XML 架构检查字段的数据类型,并强制执行从 XML 字符串型数据向相应 VBA 数据类型的转换。如果我们不进行此操作,XML 中的所有整数都将在数组中显示为字符串;但是我们希望这些数据真正显示为整数。这同样适用于所有其他数据类型。
  
    该 Select Case 语句还会为 ConvertISO8601DateFormatToVBDateTime 函数添加标注。这是例外情况,其中 ParseDataSet 函数将调用外部例程。转换 ISO 8601 数据格式的逻辑相当繁琐,因此将它分离出来更为合理。如果 XML 含有数据字段,该例程确实会对处理时间产生一些影响,但对于整体来说是可以忽略不计的。下面是 ConvertISO8601DateFormatToVBDateTime 函数:
  
  Public Function ConvertISO8601DateFormatToVBDateTime(ByRef vData As Variant) As Variant
  Dim lMonthSep As Long ' 月份分隔符位置。
  Dim lDaySep As Long ' 日期分隔符位置。
  Dim lMinutesSep As Long ' 分钟分隔符位置。
  Dim sDt As String
  Dim sTm As String
  
  lMonthSep = InStr(1, vData, "-", vbBinaryCompare)
  lDaySep = InStr(lMonthSep + 1, vData, "-", vbBinaryCompare)
  
  If lMonthSep > 0 Then
  sDt = Mid(vData, lMonthSep + 1, 2) & "/" & _
  Mid(vData, lDaySep + 1, 2) & "/" & _
  Left(vData, lMonthSep - 1)
  End If
  ' 提取时间。
  lMinutesSep = InStr(1, vData, ":", vbBinaryCompare)
  
  If lMinutesSep > 0 Then
  sTm = Mid(vData, lMinutesSep - 2, 8)
  End If
  
  ConvertISO8601DateFormatToVBDateTime = CDate(sDt & " " & sTm)
  
  End Function
  
  
    ConvertISO8601DateFormatToVBDateTime 函数将 ISO 8601 数据格式分解为它的组成部分,然后再将这些数据重组为适当的 VBA 数据。例如,我们前面提到过的数据 2002-07-19T10:53:36.000000004:00 在转换后会显示为 07/19/2002 10:53 AM。
  
    对于绝大部分来说,将 XML 分析到数据中是此解决方案中最难的一部分。ParseDataSet 函数在将已序列化为 XML 的 ADO.NET 数据分析到数组的过程中负责进行判断。我们如何使用该函数?现在,让我们对用来调用 XML Web Service 的代码进行扩展以分析数据:
  
  Dim sc As MSSOAPLib30.SoapClient30
  Dim xdl As MSXML2.IXMLDOMNodeList
  Dim vDataSet As Variant
  
  Set sc = New MSSOAPLib30.SoapClient30
  sc.MSSoapInit "http://services.fabrikam.com/OWSISample/Order.asmx?wsdl"

"在Microsoft Office中使用ADO.NET4"由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/12643.html


关键字:

关于《在Microsoft Office中使用ADO.NET4》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td