将大型XML数据传递给ADODB中的xml数据类型参数

时间:2014-06-10 03:59:47

标签: sql-server xml stored-procedures asp-classic ado

我有一个采用xml数据类型参数

的过程
create procedure my_procedure
    @xml_parameter xml
as
begin
(...)
end

我从经典的asp页面调用该过程,使用如下命令:

set cmd = Server.CreateObject("ADODB.Command")        
cmd.ActiveConnection = MyConnObj
cmd.CommandText = "my_procedure"
cmd.CommandType = adCmdStoredProc

cmd.Parameters.Append cmd.CreateParameter("@xml_parameter", adLongVarChar, adParamInput, Len(xmlData), xmlData)

如果我传递一个小的xml,它会工作。但是,当我传递一个大的xml,+ - 200 Kb时,我收到消息"该过程需要@xml_parameter参数,但未通知"。

有谁知道我如何将这个xml传递给存储过程?

PS:当我从" SQL Server Management Studio"使用相同的xml数据,因此似乎限制来自ADO。

编辑于2014年6月19日:

调试问题我从ODBC驱动程序发现了一条消息,说某些数据正在被截断。我尝试使用" Driver = {SQL Server Native Client 11.0}"来尝试更改驱动程序,但现在我收到消息:"因为语句无法确定元数据(... )使用临时表"

2 个答案:

答案 0 :(得分:0)

通过使用ADODB 2.8,Parameters.Refresh方法初始构建参数,AppendChunk方法构建其值并在执行前将参数类型更改为adLongVarWChar,我能够成功地将超过7MB的数据提交到procedure的参数中(原来是adVarWChar )

答案 1 :(得分:0)

.Refresh在数据库中查询参数,因此可以进行额外的DB通信。 对于空终止字符,所有需要完成而不是刷新的操作就是传递长度Len + 1。