因为dataset与数据库是分离的,所以你应该在你的应用程序中避免当多个客户更新数据库数据时发生冲突。这里有几种处理乐观并发错误的解决方案。一是在你的表中增加一个时间戳列。二是校验一行中所有列的数据是否与你在sql声明中使用where子句找到的数据静态匹配。下面的例子说明如何使用where条件处理乐观并发错误:
‘visual basic
dim nwindconn as sqlconnection = new sqlconnection("data source=localhost;integrated security=sspi;initial catalog=northwind")
dim custda as sqldataadapter = new sqldataadapter("select customerid, companyname from customers order by customerid", nwindconn)
' the update command checks for optimistic concurrency violations in the where clause.
custda.updatecommand = new sqlcommand("update customers (customerid, companyname) values(@customerid, @companyname) " & _
"where customerid = @oldcustomerid and companyname = @oldcompanyname", nwindconn)
custda.updatecommand.parameters.add("@customerid", sqldbtype.nchar, 5, "customerid")
custda.updatecommand.parameters.add("@companyname", sqldbtype.nvarchar, 30, "companyname")
' pass the original values to the where clause parameters.
dim myparm as sqlparameter
myparm = custda.updatecommand.parameters.add("@oldcustomerid", sqldbtype.nchar, 5, "customerid")
myparm.sourceversion = datarowversion.original
myparm = custda.updatecommand.parameters.add("@oldcompanyname", sqldbtype.nvarchar, 30, "companyname")
myparm.sourceversion = datarowversion.original
' add the rowupdated event handler.