Объект не поддерживает это свойство или метод: 'eof' для набора записей, открытого из XML - PullRequest
0 голосов
/ 25 января 2012

Я звоню в xml из веб-сервиса .net и хочу превратить его обратно в набор записей, чтобы я мог использовать его на классическом веб-сайте asp.Все идет гладко, пока я не уйду

 do until rs.eof

, а затем я получаю вышеуказанную ошибку.

Мой код, вызывающий веб-сервис:

 Dim xmlhttp
    Dim postUrl
    postUrl = "http://localhost:9065/Interrogator.asmx/TestRecordSet"

    Set xmlhttp = server.Createobject("MSXML2.XMLHTTP")
    xmlhttp.Open "POST",postUrl,false
    xmlhttp.setRequestHeader "Content-Type","application/x-www-form-urlencoded"
    xmlhttp.send()
    xml =xmlhttp.responseText
    set dom = server.createobject("microsoft.xmldom")
    dom.loadXML(xml)
   ''# get the actual value
    set node = dom.selectsinglenode("//string")
    rs= RecordsetFromXMLString(node.text)
      do until rs.eof <---- ERROR HERE
            response.Write(rs("ID"))
      rs.movenext : loop

Мой код, преобразующий xml в набор записей:

    Public Function RecordsetFromXMLString(sXML)

    Dim oStream
    Set oStream = server.createobject("ADODB.Stream")
    oStream.Charset = "iso-8859-1"
    oStream.Open
    oStream.WriteText sXML   ''# Give the XML string to the ADO Stream
    oStream.Position = 0    ''# Set the stream position to the start    
    Dim oRecordset
    Set oRecordset = server.createobject("ADODB.Recordset")       
    oRecordset.Open oStream    ''# Open a recordset from the stream
    oStream.Close
    Set oStream = Nothing
    Set RecordsetFromXMLString = oRecordset  ''# Return the recordset
    Set oRecordset = Nothing
End Function

Мой XML такой:

    <xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
    xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
    xmlns:rs='urn:schemas-microsoft-com:rowset'
    xmlns:z='#RowsetSchema'>
<s:Schema id='RowsetSchema'>
    <s:ElementType name='row' content='eltOnly' rs:updatable='true'>
        <s:AttributeType name='ID' rs:number='1' rs:write='true'>
            <s:datatype dt:type='int' dt:maxLength='4' rs:precision='0'
             rs:fixedlength='true' rs:maybenull='false'/>
        </s:AttributeType>
        <s:AttributeType name='Name' rs:number='2' rs:write='true'>
            <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='1000'
             rs:precision='0' rs:maybenull='false'/>
        </s:AttributeType>
        <s:AttributeType name='SomethingElse' rs:number='3'
             rs:write='true'>
            <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='1000'
             rs:precision='0' rs:maybenull='false'/>
        </s:AttributeType>
        <s:extends type='rs:rowbase'/>
    </s:ElementType>
</s:Schema>
<rs:data>
    <rs:insert>
        <z:row ID='1'/>
        <z:row Name='Name0'/>
        <z:row Name='blah blah0'/>
        <z:row ID='2'/>
        <z:row Name='Name1'/>
        <z:row Name='blah blah1'/>

    </rs:insert>
</rs:data>
</xml>

Я думаю, что это связано с необходимостью отключенного набора записей, но я попытался добавить

    oRecordset .LockType =adLockBatchOptimistic
oRecordset .CursorLocation = adUseClient

Как я делал на стороне .net, но это не будет, кроме этого!Я могу быть совершенно неправ, так как я разработчик ac # .net, определенно не классический asp, и я нахожу это трудным.

Кто-нибудь может увидеть, что я делаю неправильно?

1 Ответ

2 голосов
/ 25 января 2012

Я думаю, вам нужно сделать rs объект, попробуйте это

...