[ASP/XML/SQLSERVER]Hoe een xml recset te openen?

Pagina: 1
Acties:

  • Yucon
  • Registratie: December 2000
  • Laatst online: 21:20
Ik wil een for xml query uitvoeren op een sql server 2000 db. Als ik deze query uitvoer in de query analyzer krijg ik braaf xml terug. De query zelf uitvoeren is in asp ook geen probleem. Zoals ms aangeeft is krijg je een recordset met daarin 1 kolom terug. Ik heb de indruk dat de complete xml code gesplitst wordt in varchar 255's en dat je dus len(xml)/255 records terugkrijgt.

Echter: ik kan dmv for..each de kolomnaam in die recordset opvragen, maar als ik vervolgens RS(kolomnaam) gebruikt om de inhoud ervan uit te lezen krijg ik de foutmelding

ADODB.Recordset error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.

/xmltst/xmltst.asp, line 35

Vreemd, want ik heb de colname net opgevraagd... Iemand enig idee?

--
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?
  dim vReturn
  dim vItem

  cmdTemp.CommandText = "select * from accommodaties for xml auto,elements"
  cmdTemp.CommandType = 1
  Set cmdTemp.ActiveConnection = DB
  RS.Open cmdTemp, , 0, 1

  if Not (RS.BOF Or RS.EOF) Then
    for each vItem in RS.Fields
      response.write("Item:" &amp; vItem.Name &amp; "<br>")
    next  

    while not eof
      vReturn = vReturn &amp; RS(vItem)
      rs.movenext
      wend
    response.write("Ok<br>")
 
  end if
  response.write(vReturn)
?>

Verwijderd

Waarom vraag je om een XML uitvoer als je een recordset object gebruikt voor die uitvoer? Gebruik OF een xmlDOM object, of beter: haal de records in een normale recordset op en save deze in een XML DOM met de recordset method 'save'.

Je hebt dan je recordset direct in XML in je XML DOM.

  • Yucon
  • Registratie: December 2000
  • Laatst online: 21:20
Dit is op de devdays in den haag tijdens een lezing verteld.
(het idee in schemavorm dan, niet de praktijk). Ik was er als experiment wat mee aan het klooien. Ok, er is dus een betere manier, maar weet iemand toch misschien wat de reden is dat dit niet werkt?

Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    strSQL = "SELECT * FROM tabel FOR XML AUTO"
    
    Set conInSiteCD = Server.CreateObject("ADODB.Connection")
    ' Connect to the database.
    conInSiteCD.Open Application("ConnectionString")

    'Create a command object and set connection
    Set adoCommand = Server.CreateObject("ADODB.Command")
    Set adoCommand.ActiveConnection = conInSiteCD
    adoCommand.CommandText = strSQL

    'Create and open stream to catch the return xml
    Set adoStream = Server.CreateObject("ADODB.Stream")
    adoStream.open
    adoCommand.Properties("Output Stream") = adoStream

    adoCommand.Execute ,,1024 'Read the location xml in the stream object
    adoStream.Position = 0

    Set xmlParser = Server.CreateObject("MSXML2.DomDocument")
    xmlParser.async = False
    
    xmlParser.loadXML "<result>" & adoStream.ReadText & "</result>"

    Set adoCommand = Nothing
    Set adoStream  = Nothing
    Set conInSiteCD = Nothing

Kan ook door direct in het xml object te laden maar hier heb ik het ff via een streamobject gedaan.