您的位置:首页 > 数据库

[BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

2007-11-06 10:24 471 查看
使用UpdateGram更新表中的数据

目录



开发环境
开发目的
开发过程
总结
问题

开发环境

Windows2003 SP2
SqlServer 2005
BizTalik2006
VisualStudio2005

开发目的

学习在SqlAdapter的UpdateGram中,使用Update用法
验证Update中特殊字符的赋值的方法

开发过程

新建项目后,点击"Add Generated Items",启动生成向导。



选中"Add Adapter Metadata"的"Add Adapter Metadata"后,点击确定



选择已经注册了的Adapter,我这里只有Sql。然后配置要连接的数据库。



接下来要求您设置数据库连接字符串。



在弹出的数据库配置对话框中,配置数据连接方式。



配置好后,进行下一步。



配置生成的Schema的Namespace,端口类型,根节点。

Namespace:自己输入喜欢的名称

Port Type:我要用UpdateGram,所以用SendPort

Root Element Name:请求、响应的根节点



选择我期待已久的UpdateGram



选择我要实现的Update功能,要操作的表及字段(这些字段可以在后面的Schema中修改)



Finish了!



向导开始自动生成代码了



生成后,在项目中会多出下面两个文件(不用解译了吧)



打开流程文件,开始添加一个端口



启动了端口配置向导



输入端口名称



选择由向导自动生成的端口



配置端口的绑定信息



又Finish了



配置结束后的效果



直接在流程中添加接收、发送,然后与端口进行连接

添加后会自动生成对应要使用到的消息Message_1,Message_2(先不要改名,后面会用到)



当然,还要有一个流程的接收端口

配置一个接收端口(如果配置不用多讲了吧)

添加一个接收,然后与刚刚添加的接收端口做连接

把接收的Active属性设置为Tree(启用状态)

接收的消息为了简单,直接用20步时,自动生成的Message_1



添加物理发送端口

在BizTalk Explore中,添加一个发送端口



端口类型设置为发送请求并接收响应



设置发送端口名称



配置发送端口的地址

ConectionString:可以用配置向导自动生成

Namespace:在7中设置的Namespace

Response Root:在7中设置的Response Root Name



配置完成后的效果



另忘了还要设置发送端口的Pipeline,全部用Xml***的



打开项目中的Schema



这里发现,ID的位置有问题,不应该在After中,把ID移到了Before中



至此,完成上面所有的操作后,启动BizTalk部署,并完成流程的绑定、启动过程(具体步骤略)。

生成一个Schema的实例,并做了一个Sample(XmlSpy的显示效果)如下



在目的表中,添加下面的数据

注意第一条,与30中的Before相对应



将30中的xml,发到流程的接收位置处

注:接收位置我配置了一个文件接收端口,这是为了测试方便。配置方法略。

观察表中的数据表发,发现数据已经按照要求,被更新了。



如果输入的Xml中,Before数据与表中数据对应不上,会报下面的错误



事件类型: 警告

事件来源: BizTalk Server 2006

事件种类: BizTalk Server 2006

事件 ID: 5740

日期: 2007-11-5

事件: 16:39:26

用户: N/A

计算机: BIZTALK001

描述:

The adapter "SQL" raised an error message. Details "HRESULT="0x80040e14" Description="SQLOLEDB Error Description: Empty update, no updatable rows found Transaction aborted " <Root xmlns:ns00="urn:schemas-microsoft-com:xml-updategram"><?MSSQLError HResult="0x80040e14" Source="Microsoft OLE DB Provider for SQL Server" Description="SQLOLEDB Error Description: Empty update, no updatable rows found Transaction aborted "?></Root>".

错误2



事件类型: 警告

事件来源: BizTalk Server 2006

事件种类: BizTalk Server 2006

事件 ID: 5743

日期: 2007-11-5

事件: 16:39:26

用户: N/A

计算机: BIZTALK001

描述:

The adapter failed to transmit message going to send port "UpdateGram_Out" with URL "SQL://BIZTALK001/Test01/". It will be retransmitted after the retry interval specified for this Send Port. Details:"HRESULT="0x80040e14" Description="SQLOLEDB Error Description: Empty update, no updatable rows found Transaction aborted " <Root xmlns:ns00="urn:schemas-microsoft-com:xml-updategram"><?MSSQLError HResult="0x80040e14" Source="Microsoft OLE DB Provider for SQL Server" Description="SQLOLEDB Error Description: Empty update, no updatable rows found Transaction aborted "?></Root>".

总结

如果对BizTalk已经比较熟悉,全部过程不会超过30分钟
更新数据中包含的特殊字符,请用XML的转意字符串表求(如:"'&><)
字段中的换行都被替换掉了(还需要继续研究)
如果没有After的定义,那么此操作将把该记录删除(实现Delete操作)
如果没有Before,只有After,就实现了Insert操作
Before中的字段不用全部显示出来(比如只有一个ID也可以)
Before中的字段如果要求为Null,那么也同样不用标记出来
此操作就象"update table set f1=v1, f2=v2, f3=v3,... where f1=v01 and f2=v02 and ..."

问题

换行如何解决?
出现的两个错误,如何解决?
如何批量Update?

特此感谢Kent在技术上的支持!

转载请注明作者及出处
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: