各位大侠:
       我是做客运软件的,现在用.net的C#写了一个软件,情况是这样的,当我按下[受理]按钮后,有时会向数据库里写入二条记录.当初考虑到是多线程的关系,在这个[受理]按钮处加了个变量,boolean型来控制他控的太快会一次性写入二条相同的内容,这种情况概率是很低的,加了这个变量后还是出现这种现象,自己调试麻又调不出,写入数据是在一个事务里面的.
      不知那位大侠也有类事情况?

解决方案 »

  1.   

    说明你执行了两次插入的sql语句!!
    调试一下看看!!
      

  2.   

    加锁,必要时候用Mutex互斥锁。
      

  3.   

    用lock加锁试试看吧,多线程下情况下,线程在一条原子语句后就可能被切换掉了
      

  4.   

    代码因为太长,我大概讲下代码实现吧
    1.首先也就是赋值,LugBill lugBill=new LugBill();
    lugBill.name="";
    2.Common.SystemService.EntityUpdate(lugBill);这句就是实现往数据库里写东东,
    EntityUpdate()这个方法是封装好的方法;因为做一次票子受理,要更新多张表,所以是个事务.
    3.那个布尔值变量process只是通过变来防止他按的过快又受理一次,当process==false时就return掉.
    4.象那种sql语句值行了两次,我想这个不用在多说了.是的话也会不概率性问题.
      

  5.   

    使用触发器,当有相同记录是则不插入
    create trigger insertTB
    on table1 for insert
    as
    if exists(select [_id] from table1 where exists(select [_id] from inserted where [_name]=table1.[_name]) group by [_id] having count(*)>1)
    begin
    delete from table1 where table1.[p_id]=(select [_id] from inserted)
    end