[ASP] MSSQL geeft XML terug, alleen ASP zegt van niet

Pagina: 1
Acties:
  • 228 views sinds 30-01-2008
  • Reageer

  • N3vS
  • Registratie: Augustus 2001
  • Laatst online: 03-02 08:13
Hoi

Ik ben al 2 dagen bezig om het onderstaande werkend te krijgen. Ik ben ten einde raad. Ik hoop dat jullie misschien oplossing, anders tips of opmerkingen hebben die mij weer op weg kunnen helpen. Ik ben op gebied van ASP een newbie.

De code voert een Stored Procedure uit in een MSSQL2005 database. Na de execute hoort er in objXML XML code te zitten. Alleen bij vervolg functies, krijg ik een foutmelding dat objXML geen XML object is.

Error Type:
Microsoft VBScript runtime (0x800A01B6)
Object doesn't support this property or method: 'objXML.selectSingleNode'
/mha/includes/scriptlibrary.asp, line 152


Ik ben er achter gekomen dat als ik 'Response.Write(objXML(0))' doe, dat ik een string krijg met vraagtekens en waardes die enigzins lijken op de XML bestand wat er opgehaald moest worden. Verder als ik de Stored Procedure uitvoer direct in MSSQL krijg ik wel 1 veld terug met XML code.

Kan het zijn dat ik nog een extra stap moet volgen om de waardes die uit de MSSQL database komen moet casten naar een XML object? Of zit de code in een object in mijn objXML?

Ik wil jullie graag meer informatie geven, als jullie dat nodig hebben.

Alvast bedankt!

Sven

ASP.NET Visual Basic:
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
 
Set objConn = Server.CreateObject("ADODB.Connection")
Set objCommand = Server.CreateObject("ADODB.Command")
objConn.Open(g_strConnectionString)
With objCommand
    .ActiveConnection = objConn
    .CommandText = "dbo.usp_Admin_GetHubSummary"
    .CommandType = adCmdStoredProc
    Set paramId = .CreateParameter("@intUserID", adInteger  , adParamInput)
    paramId.Value = g_lngUserID
    .Parameters.Append paramId
    Set paramId = .CreateParameter("@intProjectID", adInteger, adParamInput) 
    paramId.Value = lngProID
    .Parameters.Append paramId
    Set objXML = .Execute
End With


ASP.NET Visual Basic:
149
150
151
152
153
154
155
156
157
158
If objXML Is Nothing Then
    varValue = ""
Else
    Set objNode = objXML.selectSingleNode(tmpName)
    If objNode Is Nothing Then
        varValue = ""
    Else
        varValue = objNode.text
    End If
End If

  • Viper®
  • Registratie: Februari 2001
  • Niet online
Ik neem aan dat je store procedure xml teruggeeft door FOR XML te gebruiken.

Volgens mij krijg je met FOR XML niet altijd een well formed xml document terug. Het kan zijn dat je nog een root element moet toevoegen oid.

  • N3vS
  • Registratie: Augustus 2001
  • Laatst online: 03-02 08:13
In de Stored Procedure staat 'FOR XML EXPLICIT'

Ik heb hieronder de XML code neergezet die ik terug krijg als ik de Stored Procedure uitvoer met MSSQL Manager.

XML:
1
2
3
4
5
6
<Summary LastDate="2006-10-08 16:30" CurrentDate="2006-10-27 11:13">
  <Instrument ID="102" Name="Personality Questionnaire">
    <Old New="0" Running="0" Completed="0" />
    <New New="0" Running="0" Completed="0" />
  </Instrument>
</Summary>

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 12-02 23:04

mulder

ik spuug op het trottoir

objXML is ook geen XmlDocument maar een Recordset. Je moet die xml nog wel in het XmlDocument laden.

oogjes open, snaveltjes dicht


  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Wat Don Facundo zegt.
Rename je objXml naar rsXml want die naamgeving klopt nu niet met het type.
Ik ga er vanuit dat de SP een recordset met 1 veld teruggeeft. In dat geval krijg je zoiets als:
code:
1
2
Set objXMLDoc = Server.CreateObject("MSXML2.DOMDocument.4.0")
objXMLDoc.loadXML rsXml.Fields(0).Value

Beter is nog als je de naam van het veld gebruikt om het veld op te halen ipv de index, bijv. sXml.Fields("Xml").Value
Hieronder nog een voorbeeldje:
http://www.perfectxml.com/msxmlAnswers.asp?Row_ID=60

It’s nice to be important but it’s more important to be nice


  • N3vS
  • Registratie: Augustus 2001
  • Laatst online: 03-02 08:13
Dank je wel, ik heb geprobeerd om ADODB.Command te vervangen door ADODB.ResultSet. Deze laatste ondersteund 'Save' om resultset om te zetten naar XML.
Alleen ondersteund ADODB.RecordSet geen 'CreateParameter' en kan ik hier nog geen vervanging voor kiezen.

Is er geen functie om die ADODB.Command recordset om te zetten naar XML? Of een workaround? Ik ben druk aan het zoeken, maar ik heb nog niet iets gevonden wat overeenkomt met mijn situatie.

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 12-02 23:04

mulder

ik spuug op het trottoir

Tja je zult even goed moeten kijken welke object er zijn en wat ze doen, je bent nu met vrij grove trail & error iets aan het proberen te bereiken. Deze site zou ik bij je bookmarks plaatsen: http://www.devguru.com/ hier staat uitleg/reference over oa VBA, ASP, ADO en XML objecten.

oogjes open, snaveltjes dicht


  • N3vS
  • Registratie: Augustus 2001
  • Laatst online: 03-02 08:13
pjonk schreef op vrijdag 27 oktober 2006 @ 13:18:
Wat Don Facundo zegt.
Rename je objXml naar rsXml want die naamgeving klopt nu niet met het type.
...
Ik krijg na het aanpassen van mijn script op bovenstaande manier geen foutmeldingen meer. Ik heb alleen ook geen data. Ik heb net in de SQL manager gecontroleerd, maar er staat nog wel data in het XML bestand.

Ik heb nu het onderstaande in me script staan:
ASP:
1
2
3
Response.write rsXML.Fields(0).Value
objXML.loadXML rsXml.Fields(0).Value
Response.write "TEST: "&objXML.childNodes.length 


resulteerd in de volgende output:
?null?PartID?Ratings?StartRatings?ReadyRatings?SentRatings?AccountName?ClientName?GenderName?FullName?EmailAddress?StartMailDate?ReminderMailDate?FirstName?LastName?View?Part?L???TEST: 0

aan de hand van deze XML in de Stored Procedure:
XML:
1
2
3
<View>
  <Part PartID="21372" Ratings="1" StartRatings="0" ReadyRatings="0" SentRatings="1" AccountName="KOE Works" ClientName="System Client" GenderName="Mr" FullName="Jan koe" EmailAddress="jan.beck@koe.com" StartMailDate="&amp;nbsp;" ReminderMailDate="10/8/2006" FirstName="Jan" LastName="koe" />
</View>

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Waarom doe je eigenlijk de XML tussenstap? Heb je daar een reden voor?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • N3vS
  • Registratie: Augustus 2001
  • Laatst online: 03-02 08:13
P_de_B schreef op vrijdag 27 oktober 2006 @ 14:23:
Waarom doe je eigenlijk de XML tussenstap? Heb je daar een reden voor?
Ik had opdracht gekregen om het beetje aan te passen. Nou is de code semi-modulair, dus als ik alles weer terug in hetzelfde object krijg dan hoef ik niet zo veel aan te passen.

Ik ga inderdaad gewoon maar alles los overzetten, dan maak ik er zelf wel een XML bestand van, zodat de rest van het script gewoon normaal functioneerd.

Als ik 'FOR XML EXPLICIET' weghaal, dan is de eerste rij van mijn recordset allemaal 'NULL'. Zou dit invloed kunnen hebben op mijn ASP ResultSet, voordat ik het omzet naar XML? Toch wel apart, gezien het feit dat de XML in MSSQL manager er wel goed uit ziet.
Pagina: 1