增補透視一文:將ADO.NET或Webservice返回的DataSet轉換成ADODB.Recordset (轉)
增補透視一文:將或service返回的DataSet轉換成ADO.Recordset:namespace prefix = o ns = "urn:schemas--com::office" />
小氣的神 2001-10-23
記得在《透視和調整你的企業和商務》一文中,我們討論了有關、P、WebService的一些問題,特別對於這樣的一些問題:
如何生成一個構造一個簡單的三層結構(Window DNA)
如何將現有的元件暴露出來,成為一個WebService
如何使用MS SOAP Toolkit來生成Client消費WebService
如何在中SOAP Toolkit生成的WebService
如何處理和傳輸ADODB.Recordset型別的資料,實現自己的CTM。
如何將目前的元件用.NET封裝成WebService
進行了一些討論和實驗,在討論到用封裝我們的元件成WebService,然後使用MS SOAP Toolkit消費WebService時,我曾跳過了一個問題,那就是如何接收WebService傳輸過來的成組資料。
記得程式碼是這樣的:
Dim RetXML as
Dim SoapClient As MSSOAPLib.SoapClient
Set SoapClient = New MSSOAPLib.SoapClient
Call SoapClient.mssonit("")
Set RetXML = SoapClient.GetAuthors()
GetAuthors()返回的是一個DataSet型別,在開始生成WebService時我們是這樣封裝的:
Dim obj As bus_Authors.Authors
Dim rst As ADODB.Recordset
Dim myDataAdapter As OleDb.OleDbDataAdapter
Dim retDataset As DataSet
obj = New bus_Authors.Authors()
rst = New ADODB.Recordset()
myDataAdapter = New OleDb.OleDbDataAdapter()
retDataset = New DataSet()
rst = obj.GetAuthors()
myDataAdapter.Fill(retDataset, rst, "GetAuthors")
GetAuthors = retDataset
End Function
而對於VB來說RetXML將是不可以認識和直接使用的,好在Dataset是基於XML的,事實上它是有規律的,我們可以透過直接訪問.asmx()來在網頁上呼叫這個WebService 的GetAuthors(),在IE中我們可以看到這個Dataset的結構,這樣我們就可以找出規律,來使用這個Dataset中的資料。
os XML Dataset" hspace=0 src="" align=baseline border=0>
根據上面的情況我寫了一個可以將Dataset轉換成ADODB.Recordset
Public Function ConvDatasetToRecordset(ByVal voNL As IXMLNodeList, ByVal vsTableName As String) As ADODB.Recordset
Dim iXMLTableNode As IXMLDOMNode
Dim iXMLRecordNode As IXMLDOMNode
Dim iXMLFieldNode As IXMLDOMNode
Dim iXMLNodeList As IXMLDOMNodeList
Dim retRS As ADODB.Recordset
Dim s As String
On Error GoTo ErrHandle
' Create Recordset using the xsd schema
sXPath = "//xsd:element[@name=""" & vsTableName & """]/xsd:complexType/xsd:sequence"
Set iXMLTableNode = voNL.Item(1).SingleNode(sXPath)
Set retRS = New ADODB.Recordset
For Each iXMLFieldNode In iXMLTableNode.childNodes
If Not iXMLFieldNode.Attributes Is Nothing Then
Call retRS.Fields.Append(iXMLFieldNode.Attributes(0).Text, GetDataType(iXMLFieldNode.Attributes(1).Text), 512)
End If
Next
' Add the data to the Recordset
sXPath = "//" & vsTableName
Set iXMLNodeList = voNL.Item(3).selectNodes(sXPath)
Call retRS.Open
For Each iXMLRecordNode In iXMLNodeList
Call retRS.AddNew
For Each iXMLFieldNode In iXMLRecordNode.childNodes
If Len(iXMLFieldNode.baseName) > 0 Then
retRS.Fields(iXMLFieldNode.baseName) = iXMLFieldNode.Text
End If
Next
Next
If Not (retRS.BOF And retRS.EOF) Then Call retRS.MoveFirst
Set ConvDatasetToRecordset = retRS
ErrExit:
Exit Function
ErrHandle:
Set ConvDatasetToRecordset = Nothing
Resume ErrExit
End Function
Private Function GetDataType(ByVal vsType As String) As ADODB.DataTypeEnum
' Convert the XSD datatype to a
Select Case vsType
Case "xsd:string"
GetDataType = adVarChar
Case "xsd:int"
GetDataType = adInteger
Case "xsd:dateTime"
GetDataType = adDate
Case "xsd:decimal"
GetDataType = adDouble
Case "xsd:boolean"
GetDataType = adBoolean
End Select
End Function
對於GetDataType中的型別我沒有一一試過,只使用了常見的幾個,具體的可以參見下面的連結:
繼續新增,以保證能夠符合你具體的需要。然後套用我們在第三篇中的表現層的函式顯示在一個Grid中:
Set RetXML = SoapClient.GetAuthors()
Set result = ConvDatasetToRecordset(RetXML, “GetAuthors”)
LvwHeadName lstAuthors, strHeaders
ADOFillLvw result, lstAuthors
想想挺有意思,開始是ADODB.Recordset型別的,然後在WebService中轉換成DataSet型別,然後又轉換成ADODB.Recordset。XML是一個強大的介質,而dotNET中對於Dataset比上一版的Recordset也將是一種突破。對於DataSet的應用也將是極其靈活和沒有限制的,因為它的核心和基礎是XML。
既然是增補,我也應要求將透視和調整一文中涉及到的例子的Project和程式碼上載到CSDN,另外一個是拷屏的圖片,希望兩者對於閱讀和理解會有少許幫助,具體的過程我就省略了。
相關檔案:
)
)
特別:
以上文字和圖片涉及其他人的和個人權利,如非被授權或經本人同意,任何網站或期刊請不要刊登、轉載、改編、轉貼或已其他形式進行傳播。以上所有文字和圖片只用於內部交流,不作任何新聞發表和商業用途。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990975/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 將Json資料轉換為ADO.NET DataSet物件JSON物件
- 將soap報文(或xml)轉換成物件XML物件
- flink將bathch dataset 轉換為sql操作BATSQL
- 將字串轉換成Bitmap型別 或者 將Bitmap轉換成字串字串型別
- XML與DataSet的相互轉換XML
- excel日期格式轉換中,怎樣將“/”轉換成“-”Excel
- 將整數轉換成字串字串
- 將“PDF轉換成PPT”與“PPT轉PDF”的方法
- 如何將圖片轉換成影片?
- Word將文字轉換成表格技巧
- DataSet與泛型集合間的互相轉換泛型
- 將Reporting Service報表轉換成.doc或pdf文件格式
- 如何將HEIC轉換為JPG / JPEG或PNG?
- php將arm轉換成mp3PHP
- javascript如何將字串轉換成陣列JavaScript字串陣列
- 將json字串轉換成list<T>JSON字串
- ruby中將陣列轉換成hash陣列
- 將數字轉換成單詞形式
- 如何將jquery生成的物件轉換成dom物件jQuery物件
- 想要將視訊轉換成GIF檔案?就是這麼簡單
- GIF轉換成視訊竟然如此清晰
- 將bmp檔案轉換成JPEG(待修改,目前可轉換但圖片倒轉)
- 將UIView轉成UIImage,將UIImage轉成PNG/JPGUIView
- 將 SQL轉換成 Laravel Query Builder 程式碼SQLLaravelUI
- 如何將heic格式轉換成jpg圖片?
- JNI - 如何將 char 轉換成 jstringJS
- Java如何將Object轉換成指定Class物件JavaObject物件
- 怎樣將電腦上的PDF轉換成TXT
- 電腦上快速將PDF轉換成TXT的教程
- 將xml佈局轉換成View的幾種方式XMLView
- pdf轉換成word,免費轉換
- oracle行列轉換-多行轉換成字串Oracle字串
- 手把手教你怎麼使用ps將文字轉成透視斜切效果(技巧分享)
- js 將負數或小數轉成正整數JS
- 如何將檔案PDF格式轉換成Word格式
- 將表結構轉換成實體欄位
- javascript如何將字串轉換成json格式物件JavaScript字串JSON物件
- 將json格式物件轉換成陣列物件JSON物件陣列