打印本文 打印本文 关闭窗口 关闭窗口
浅谈ADO.NET文章系列之二 — 并发更新冲突的处理
作者:武汉SEO闵涛  文章来源:敏韬网  点击数1935  更新时间:2009/4/23 10:40:56  文章录入:mintao  责任编辑:mintao
                mytransaction = conn.BeginTransaction

                cmd1.Transaction = mytransaction ‘这里假设已经建立了cmd1对象

                cmd1.ExecuteNonQuery()  

 

                mytransaction.Commit() ''''提交事务

 

         Catch ex As Exception

                mytransaction.Rollback() ''''回滚事务

                Return -1 做一些其他处理

         Finally

                conn.Close()

   End Try

 

  说明:对于dataadapter.update方法,如何使用事务呢?其实dataadapter本身并不进行数据更新,而是它的insertcommand,updatecommand,deletecommand。那么就象上面一样设置这三个command对象的Transaction属性就可以了。其他的和上面没有什么不同。

 

5.  既然我们在前面说了采用开放式并发处理,就要对异常进行相应的捕获,给出相应的提示信息和处理办法。对于那些可能引起异常的代码都要包含在

try 

   … 

end try

块之间,这是一个很好的习惯。

一般可以采用类似下面的操作:

Try

            Sqldpr1.Update(ds1.Tables("table1"))

 Catch Ex As Data.DBConcurrencyException ''''并发冲突的异常

     ‘做相应的处理

 End try

说明:这里的做相应的处理,可以是把最新的行从数据库中读出来更新现有的行(当然如果该行被删除例外),也可以重新填充数据(fill操作)。这个时候我们可以作出判断,该行是被删除的情况,可以使用一个函数将Ex.row(“ID”)作为参数传递过去,使用一个command.executeschar方法来判断是否记录存在,使用executereaderfill来取得已经变化的记录或刷新全部记录。这里提到了update()方法引发的异常,如果是立即更新引起的,处理的方式也是一样的。

 

总结:

  由于时间和本人水平的问题,这个问题不能讨论的太深入,请大家原谅。可能里面涉及的范例代码比较少(呵呵,真的很少),读起来可能有些头疼,但我想如果你对数据更新的原理如果比较熟悉应该可以理解其中的意思。最后,还是希望大家能多提意见!有时间一定给出相关的范例代码。

                                

--闵峰

 

 

上一页  [1] [2] 

打印本文 打印本文 关闭窗口 关闭窗口