0
我必须使用XML请求调用SP。这个是由向导自动生成的XML文档,其元素如下:通过xml元素而不是属性的BizTalk存储过程请求
<xs:element name="sp_storedProcedureName">
<xs:complexType>
<xs:attribute name="Field1" type="xs:string"/>
<xs:attribute name="Field2" type="xs:string"/>
. . .
某些SP参数可能为空。这些属性不适合这种情况,因为空属性意味着“无属性”,因此模式验证失败。
我手动重新创建请求架构以这样的方式
<xs:element name="sp_storedProcedureName">
<xs:complexType>
<xs:sequence>
<xs:element name="Field1" type="xs:string"/>
<xs:element name="Field2" type="xs:string"/>
<xs:element name="FieldN" type="xs:string" nillable="true"/>
. . .
和创建的消息似乎是有效的(LINT是这么说的,地图测试失败),这意味着该值是:
<ns0:sp_storedProcedureName>
<ns0:Field1>AB</ns0:Field1>
<ns0:Field2>ZZ</ns0:Field2>
<ns0:FieldN xsi:nil="true" />
. . .
这正是我所需要的。 当消息到达的发送端口管道传输失败,出现错误:
HRESULT="0x80040e10"
Description="Procedure or function 'sp_storedProcedureName' expects parameter '@Field1', which was not supplied."
但很明显,该值由XML提供的,但我想一个SQL适配器无法阅读一个元素,而能够从主要元素的属性读取。
是这样吗?
我的主要问题是:如何将空值传递给存储过程使用xml?
你是否正确地声明了命名空间? – Shnugo
@Shnugo是的。我只使用向导声明的元素来声明属性。否则,我会收到带有属性的架构的传输失败 – strongmmc
更改您的存储过程,以便将Field1的默认值设置为空。附:为什么你还在为biztalk-2006开发?这是失去支持。 – Dijkgraaf