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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将大型XML数据传递给ADODB中的xml数据类型参数相关的知识,希望对你有一定的参考价值。

我有一个采用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}”更改驱动程序,但现在我收到消息:“无法确定元数据,因为语句(...)使用临时表”

答案

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

另一答案

.Refresh查询数据库中的参数,从而获得额外的数据库通信。所有需要完成而不是刷新传递的长度为Len + 1,用于null终止字符。

以上是关于将大型XML数据传递给ADODB中的xml数据类型参数的主要内容,如果未能解决你的问题,请参考以下文章

如何将 XML 数据作为参数传递给从 C# 到 Sql 服务器的 TVP 参数

将类型安全的路线数据传递给角度 2 中的路线

WebContent的子目录里面的jsp文件无法将数据传递给Servlet

将复杂类型作为数据传递给 jquery ajax post

将表单数据传递给.NET中的多个操作[重复]

如何将 ajax 数据传递给 React 组件?