none
在WebService中,如何判断SqlDataAdapter.Update(dataTable)是否成功? RRS feed

  • 问题

  • winform程序,架构大致如下。客户端 UI层,将修改的数据通过getChanges()取到一个DataTable中,传给服务器WebService层,WebService层调用DAL层的一个方法,来更新数据库。这个方法使用SqlDataAdapter.Update(dataTable)。我想知道,如何判断更新是否成功?怎样根据更新的结果修改UI层的行状态?

    比如这个表中有多条记录需要更新,如果其中一条出现错误,那么之前更新的记录应该是有效的。通过判断更新的行数?这样好像不是很可靠。
    另外,更新成功后,dataTable的行状态会发生变化,也许根据行状态rowstatus判断是准确的。

    如果只是部分更新成功,带来的另一个问题就是,如果根据更新客户端UI层的数据源,不能简单的使用acceptext()了。还需要把这个dataTable再从服务器传到客户端?这样带来了数据流量的增加。

    不知道通常的做法是什么?请不吝赐教,谢谢!
    2009年7月17日 9:00

答案

  • 1. 通常提交给 WebService 的数据,都是 GetChanges() 后的数据,也就是要更新多少行你事前是知道的
    2. 更新时看需要一般都需要使用事务,有错误回滚,并返回给调用方错误信息。.Net 2.0 TransactionScope 你可以了解一下(如果出了部分更新失败,排开网络原因、事务、特殊业务等原因,可能是由于数据结构设计不当,或程序实现不当造成的)
    3. 一般情况下更新都是 void 方法,不需要返回更新生的数据。有些业务是需要重新从数据库中获取数据返回数据的这个要看你的具体业务情况
    4. 分布式数据库主键可以采用 Guid(uniqueidentifier) 优点是产生的新Guid 是唯一的更灵活,缺点是字符比较长增加了网络传输量

    知识改变命运,奋斗成就人生!
    • 已标记为答案 Miles2009 2009年7月18日 4:30
    • 已标记为答案 Miles2009 2009年7月18日 7:55
    2009年7月18日 1:35
    版主

全部回复

  • Hi,
       我建议你重新写个更新的方法,参数,你可以直接传递修改的字段,合作自己定义一个实体类,调用存储过程更新数据库。成功返回1,否则0.
    你在DAL里调用的时候可以做判断。
       更新数据,完全可以再修改完毕后,执行一次查询,数据重新绑定。
       不建议使用DataSet 或者DataTable。
    Frank.Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    老徐的博客:http://frank_xl.cnblogs.com
    2009年7月17日 10:15
    版主
  • 请参考:SqlDataAdapter.Update会返回更新的行数。
    1、放在一个事物里,不成功就都不成功,只要远程服务返回一个成功或失败的bool值就能决定是否更新界面。这样用当前的dataTable即可,不用重新获得。
    2、不放在事务里,更新后重新获取数据,只要您的使用场景不苛刻,性能上没问题。
    2009年7月17日 15:50
  • 1. 通常提交给 WebService 的数据,都是 GetChanges() 后的数据,也就是要更新多少行你事前是知道的
    2. 更新时看需要一般都需要使用事务,有错误回滚,并返回给调用方错误信息。.Net 2.0 TransactionScope 你可以了解一下(如果出了部分更新失败,排开网络原因、事务、特殊业务等原因,可能是由于数据结构设计不当,或程序实现不当造成的)
    3. 一般情况下更新都是 void 方法,不需要返回更新生的数据。有些业务是需要重新从数据库中获取数据返回数据的这个要看你的具体业务情况
    4. 分布式数据库主键可以采用 Guid(uniqueidentifier) 优点是产生的新Guid 是唯一的更灵活,缺点是字符比较长增加了网络传输量

    知识改变命运,奋斗成就人生!
    • 已标记为答案 Miles2009 2009年7月18日 4:30
    • 已标记为答案 Miles2009 2009年7月18日 7:55
    2009年7月18日 1:35
    版主