我发现这个错误正在寻找解决在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),还有其他任何想法吗?
答案 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
'
请记住,这只是一种解决方法。
干杯!