ASP Classic中的ADODB的XML输出参数

时间:2014-05-26 09:54:56

标签: sql xml asp-classic adodb

我发现这个错误正在寻找解决在ASP经典中检索XML问题的方法: Declaring XML output parameters with ADODB in ASP Classic

我在使用Classic ASP和SQL Server 2003时遇到了同样的错误。我曾经在VB6中使用.dll,在那里我可以获得XML代码。但现在我需要从SQL直接到ASP。 你有没有设法解决它?

到目前为止,我在经典ASP中的代码是:

set objCommandoOP = Server.CreateObject("ADODB.Command")
Set objCommandoOP.ActiveConnection = objConexion
objCommandoOP.CommandType = adcmdStoredProc
objCommandoOP.CommandText="spProducesXML"
set ParamEnt = objCommandoOP.CreateParameter("@CodOne", adInteger, adParamInput, 4, Entidad())
objCommandoOP.Parameters.Append ParamEnt
set ParamUser = objCommandoOP.CreateParameter("@CodTwo", adInteger, adParamInput, 4, Usuario())
objCommandoOP.Parameters.Append ParamUser
set ParamFrac = objCommandoOP.CreateParameter("@GroupType", adInteger, adParamInput, 4, Request("GrupoFrac"))
objCommandoOP.Parameters.Append ParamFrac
set ParamReturn = objCommandoOP.CreateParameter("@paramReturn", adXML, adParamInputOutput, 4, 0)

objCommandoOP.Parameters.Append ParamReturn

set objResultseto = Server.CreateObject("ADODB.RecordSet")
'Internal procedure that execute the ddbb sp
ExecProcedure objResultseto, adOpenStatic, objCommandoOP

sResult = "<dmo:OperationImport xmlns:dmo='http://www.example.es/XML' xmlns:xs='http://www.w3.org/2001/XMLSchema' />"
sResult = sResult & ParamReturn
sResultXML= sResultXML & "</dmo:OperationImport>"

错误发生在&#34; adXML&#34; line,因为David我找不到一个XML变量来从ddbb中引入参数。我尝试将其作为SQL过程的paramReturn(使用FOR XML EXPLICIT),还有其他任何想法吗?

2 个答案:

答案 0 :(得分:1)

您在adXML行收到错误的原因是因为此数据类型没有DataTypeEnum

ADO 2.6中,ADODB.Command对象已扩展为支持使用ADODB.Stream对象传递和接收XML数据。

要在ADODB.Command中传递XML数据类型,请使用CommandStream属性

Set stream = Server.CreateObject("ADODB.Stream")
Call stream.Open()
Call stream.WriteText(xml, adWriteChar)

'Set ADODB.Stream to CommandStream before executing ADODB.Command
command.CommandStream = stream
command.Execute(, , adExecuteStream)

要检索XML数据类型,请使用动态属性Output Stream

Set stream = Server.CreateObject("ADODB.Stream")
Call stream.Open()

'Set ADODB.Stream to dynamic property "Output Stream"
command.Properties("Output Stream") = stream
command.Execute(, , adExecuteStream)
'Reset stream position before reading
stream.Position = 0
xml = stream.ReadText

有用的链接

答案 1 :(得分:0)

我终于可以解决这个问题。基本上将参数从SQL发送为varchar(max)而不是XML,然后将其作为Object Resulset在ASP中处理,我将varchar转换为XML。尝试了超过30k字符的文件,仍然有效。 到目前为止的经典ASP代码:

`

dim objResultseto
set objResultseto = Server.CreateObject("ADODB.RecordSet")
AbrirProcAlmacenado objResultseto, adOpenStatic, objCommand             

if objResultseto.EOF= false then        
 while (objResultseto.EOF = false)

        Set xmlOperaciones = Server.CreateObject("Msxml2.DOMDocument.4.0")
            xmlOperaciones.Async = False
            xmlOperaciones.loadXML(objResultseto("XML_VAR"))
            xmlOperaciones.setProperty "SelectionNamespaces","xmlns:dmo='http://www.webpage.com/'"
            if xmlOperaciones.parseError = 0 then 
                xmlOperaciones.Save("C:\Example.xml")
                sResultado= "OK"
            end if
            objResultseto.movenext
 wend
else
 response.Write("There are no these kind of operations")
 response.end
end if

'

请记住,这只是一种解决方法。

干杯!