.NET的数据传输之道
了。您无需任何第三方产品--甚至不使用ADOCE--即可轻松做到这一点。对此,我的一位同事说,“这实在令人惊讶!” 代码讨论 以下代码为cmdGetRecordset_Click事件的代码(当您按下窗体底部的“Get”按钮时运行): DimlavParameters(2)AsVariant DimlsAsString DimlitmAsListItem DimiAsInteger 'Setparameters lavParameters(1)=txtDSN.Text lavParameters(2)=txtSQL.Text 'MakeSOAPCall ls=SOAPCall(txtURI.Text,GetRecordset,lavParameters,chkShowPackets=1) 'ClearandaddListViewheadings lvwRecordset.ColumnHeaders.Clear lvwRecordset.ColumnHeaders.Add1,,ArtNo,700 lvwRecordset.ColumnHeaders.Add2,,Description,1450 lvwRecordset.ColumnHeaders.Add3,,Price,850,lvwColumnRight 'ClearandfillListViewfromXML(withRecordsetEmulation) lvwRecordset.ListItems.Clear XMLRSOpenls DoWhileNotXMLRSEOF Setlitm=lvwRecordset.ListItems.Add(,,XMLRS(ArticleNo)) litm.SubItems(1)=XMLRS(Description) litm.SubItems(2)=XMLRS(Price) XMLRSMoveNext Loop XMLRSClose 代码说明: 传递给SOAP方法的两个参数(DNS和SQL)是从TextBox控件中取得的,其返回值是XML格式的ADO数据集。如需了解同SOAPCall函数及其参数有关的更详细信息,请参阅我的循序渐进文章“为Microsoft.NET做好准备”。 正如您看到的,整个实现方式类似于ADORecordset的使用方式(简化了代码复用)。以“XMLRS…”开始的这些函数保存在XMLRS.bas模块,让我们深入到模块内部看一下。以下是XMLRSOpen函数中的一部分代码: 'CreateDOMobject SetpoXML=CreateObject(Microsoft.XMLDOM) 'Loadstring psXML=XML 'LoadDOM poXML.loadXMLpsXML 'Positiondatanodes SetpoDataNodes=poXML.documentElement.selectNodes(//rs:data) SetpoDataNodes=poDataNodes.Item(0).childnodes 代码说明: psXML变量用来存放ADORecordset的XML表述。 PoXML变量是XMLDOM对象,用来存放记录集数据。 PoDataNodes变量保存所有记录集数据行的XML元素。 我们现在有了一个对象,该对象包含了记录集中的所有数据行,它就是我们开始数据导航所需要的东西。我们可以使用XMLRSMoveFirst和XMLRSMoveNext函数进行数据导航。下面让我们仔细考察一下XMLRSMoveNext函数: 'ChecknotEOF IfNotXMLRSEOF()Then 'Increasepointer piRecordPos=piRecordPos+1 EndIf 为了理解整个程序逻辑,让我们看看XMLRSEOF函数: 'CheckEOF IfpiRecordPos>poDataNodes.length-1ThenXMLRSEOF=True 现在,我们需要知道如何取出实际数据,完成这一工作的是XMLRS: 'Checkiffieldnumberorfieldname IfIsNumeric(FieldID)Then 'GetFieldData XMLRS=poDataNodes(piRecordPos).Attributes(FieldID).Text Else 'GetFieldData XMLRS=poDataNodes(piRecordPos).Attributes.getNamedItem(FieldID).Text EndIf 正如您所看到的,我们可以提供一个字段名(就像我在窗体代码中所做的)以及一个字段序号 如需了解更多详细信息,我建议您认真阅读完整的示例的代码。 助你上路 您应该仔细分析XMLRS.bas模块,我在此只提供了几个必需的函数。以便您能很快上手。当然,我们还应该实现更多的ADORecordset功能。因为该模块使用了XMLDOM对象,您需要具有一些XML知识。 当然,这并不是一个解决这个问题的“企业级”解决方案。我希望ADOCE能在将来在Recordset(或者类似构造)中加入对XML的支持,这样就不用再使用XMLRS.bas模块了。如果容量发生了变化,只需对我提供的这些代码做一些小的修改即可,从而保护了您的前期投资和工作。 同时,如果您决定在该模块的基础上完成一些开发工作,您可以同我联系。我将利用您完成的增强版本对本文所介绍的示例代码进行升级。这将极大地增加您的知名度! 未来会怎样 我相信,在不远的将来,所有的.NET特性都将在PocketPC得到应用。其中可能包括类似“连接断开”式ADORecordsets和XML支持这样一些特性。我甚至相信,将ADORecordset数据(XML)封装进SOAP调用这一过程对开发人员来说将是透明的。 您可以修改XMLRS.bas以使其适应新的XML数据集结构,您也可以简单地对代码进行升级,使用Recordset功能代替XMLRS中的函数。 小结 从任何地方对企业数据加以访问的能力所蕴藏的能量是异常巨大的。在多层解决方案(带有组件)中,您可以允许您的业务逻辑被世界各地的用户所使用,甚至是那些无线用户。
- 基于 DSP-dMAX 的嵌入式 FIFO 数据传输系统设计(04-11)
- McBSP技术在数据传输中的应用(10-23)
- 基于DSP-dMAX 的嵌入式 FIFO 数据传输系统设计(11-27)
- 基于DSP的嵌入式 FIFO 数据传输系统设计(02-19)
- 基于DSP的CAN总线多节点远程数据传输系统(06-27)
- 嵌入式Linux的SOHO路由器电路设计(11-18)