我用一个方法,在表里多加一个列。
客户端向服务器请求一个guid, 然后把这个guid写到这个列中去,就可以区分是谁的数据了。
其实在bs结构中也有类似情况,当多个客户端向同一张临时表写数据时,当最后确认才真正提交
数据的情况下,一个临时表中可能有多个客户的临时数据,甚至同一客户不同页面刷新的数据
我就用这个方法来区分(每个用户!IsPostback()时向服务器索要一个guid,cs结构的程序也差不多
吧)

解决方案 »

  1.   

    对,一般来说还是按以前的方法,,一有改动,就立即更新,更新出错就知道有别人更新了,再重新Get数据,更次提示用户更新
      

  2.   

    有些情况是不能立刻更新的。
    如果一个用户读出一个batch,一共5条纪录,它修改了其中2条,但是后来突然想放弃修改
    了。。难道还要回滚,这样好像更麻烦啊。还不如写临时表。等到最后提交时才真正
    更新。但是对于多户用来说,不可能同时为每个用户独自开一个临时表。
      

  3.   

    我一直用多加一个GUID列来区分不同客户段以及同一客户端不同页面的数据冲突的问题。
    设计基本思路是用一个GUID, 如2004121100000001, 每次请求+1, 这样的代码很容易写。
    然后每次!IsPostback()时重新取一个新的GUID.客户端提交的数据全部放在临时表,只有
    他最后确认才真正写到数据库。这样即使在BS结构下客户端直接关闭浏览器也不会有问题。
    像我前面举的例子,如果客户改了一个batch中的2条记录而突然关闭浏览器,如果直接更新
    肯定没发解决,而且bs下关闭浏览器是没事件的,根本没法回滚。在这个设计下,最多临时
    表中多了几个垃圾记录,到第二天可以根据guid的前8个字符删除所有垃圾纪录。我做了几个比较大多用户的项目,用的都是这个方法,就是要多写一些代码。我也一直在找
    更简单更有效的方法ing...
      

  4.   

    刚才给你写了好多,结果提交失败郁闷.
    总的来说1 使用存储过程,里面加入数据处理
    2 每个Client,作update,或者insert时在自己的DataSet 里面进行,然后有一个Update 的动作,就行了.如果有两个Client同时update时 ,Sql Server 会自动进行异步处理的,如果提交失败,存储过程的事务处理会自动回滚的,然后在Client里面显示提交失败.
      

  5.   

    总的来说1 使用存储过程,里面加入事务处理.
    刚才打错了
    数据更新尽量在Client 端进行,最后进行update操作,写入数据库,整体提交,不要单个提交.
      

  6.   

    基本不会出现数据冲突,client只做输入输出,将业务逻辑处理放在server进行,对数据库的写冲突控制由数据库的自己管理,一般做商业系统都不用考虑,象原来做的银行综合业务系统,一天交易量40多万笔,也没有出现数据冲突的情况。
      

  7.   

    Adapter.Update()算不算所谓的“业务逻辑处理放在server进行”?
      

  8.   

    Adapter.Update()算不算所谓的“业务逻辑处理放在server进行”?
      

  9.   

    没有使用Adapter,如我们现在开发的系统,使用web service,发请求到后台处理。