使用UpdateGram更新表中的数据

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

开发环境

  • Windows2003 SP2
  • SqlServer 2005
  • BizTalik2006
  • VisualStudio2005

开发目的

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

开发过程

  1. 新建项目后,点击"Add Generated Items",启动生成向导。
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  2. 选中"Add Adapter Metadata"的"Add Adapter Metadata"后,点击确定
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  3. 选择已经注册了的Adapter,我这里只有Sql。然后配置要连接的数据库。
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  4. 接下来要求您设置数据库连接字符串。
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  5. 在弹出的数据库配置对话框中,配置数据连接方式。
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  6. 配置好后,进行下一步。
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  7. 配置生成的Schema的Namespace,端口类型,根节点。
    Namespace:自己输入喜欢的名称
    Port Type:我要用UpdateGram,所以用SendPort
    Root Element Name:请求、响应的根节点
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  8. 选择我期待已久的UpdateGram
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  9. 选择我要实现的Update功能,要操作的表及字段(这些字段可以在后面的Schema中修改)
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  10. Finish了!
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  11. 向导开始自动生成代码了
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  12. 生成后,在项目中会多出下面两个文件(不用解译了吧)
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  13. 打开流程文件,开始添加一个端口
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  14. 启动了端口配置向导
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  15. 输入端口名称
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  16. 选择由向导自动生成的端口
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  17. 配置端口的绑定信息
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  18. 又Finish了
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  19. 配置结束后的效果
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  20. 直接在流程中添加接收、发送,然后与端口进行连接
    添加后会自动生成对应要使用到的消息Message_1,Message_2(先不要改名,后面会用到)
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  21. 当然,还要有一个流程的接收端口
    配置一个接收端口(如果配置不用多讲了吧)
    添加一个接收,然后与刚刚添加的接收端口做连接
    把接收的Active属性设置为Tree(启用状态)
    接收的消息为了简单,直接用20步时,自动生成的Message_1
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  22. 添加物理发送端口
    在BizTalk Explore中,添加一个发送端口
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  23. 端口类型设置为发送请求并接收响应
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  24. 设置发送端口名称
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  25. 配置发送端口的地址
    ConectionString:可以用配置向导自动生成
    Namespace:在7中设置的Namespace
    Response Root:在7中设置的Response Root Name
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  26. 配置完成后的效果
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  27. 另忘了还要设置发送端口的Pipeline,全部用Xml***的
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  28. 打开项目中的Schema
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  29. 这里发现,ID的位置有问题,不应该在After中,把ID移到了Before中
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

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

  30. 生成一个Schema的实例,并做了一个Sample(XmlSpy的显示效果)如下
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  31. 在目的表中,添加下面的数据
    注意第一条,与30中的Before相对应
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  32. 将30中的xml,发到流程的接收位置处
    注:接收位置我配置了一个文件接收端口,这是为了测试方便。配置方法略。
    观察表中的数据表发,发现数据已经按照要求,被更新了。
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

  33. 如果输入的Xml中,Before数据与表中数据对应不上,会报下面的错误
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

    事件类型: 警告
    事件来源: 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>".

  34. 错误2
    [BTS]BizTalk2006 SqlAdapter UpdateGram的Update用法

    事件类型: 警告
    事件来源: 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在技术上的支持!

转载请注明作者及出处

相关文章:

  • 2022-12-23
  • 2021-10-29
  • 2022-02-15
  • 2021-08-13
  • 2021-08-04
  • 2022-02-20
  • 2021-09-17
  • 2021-09-14
猜你喜欢
  • 2021-05-28
  • 2021-05-28
  • 2021-06-04
  • 2021-11-30
  • 2021-07-12
  • 2021-07-01
  • 2021-08-03
相关资源
相似解决方案