SqlCommand使用完毕后马上关闭,不要作为全局变量来传递到所以的方法中,只要保持一个SqlConnection即可,在所以的方法中由SqlConnection生成SqlCommand,并将Transaction传递给SqlCommand,直到最后所有方法都顺利完成的时候调用Commit(), 一旦有错就全部Rollback().

解决方案 »

  1.   

    你说的问题涉及到并发控制问题,.net使用开放式并发控制,具体你可以查帮助!
      

  2.   

    建议楼主看看MSDN,上面应该有.
      

  3.   

    你所说的问题并不是.net的问题,而是sqlserver的问题,记得我以前看过一篇文章,其中说道sqlserver的lock机制不太好,其中默认设置是当一个用户lock后,其他人是无法访问,而你可以用以下的语句试试
    select * from yourtable (readpast)
      

  4.   

    但是这样查询出来结果不包括已经修改但没有commit的数据
      

  5.   

    or
    select * from yourtable (nolock)
      

  6.   

    谢谢楼上各位的回答. 的确是SQL Server的问题, 如果不设计以前update过的table是完全没问题的. 但一旦之前用过的table被update,但是没有commit; 以后(在commit之前)便无法访问. 单纯的select不行(明天试试加个 with nolock行不行). SqlServer的locking机制似乎只对不同的用户有效, 才同一个用户身上似乎是按照first in first served的原则, 即使是更改了isloation (lock)的level, 后来的也要等到前面的处理完 :(
      

  7.   

    我觉得这并不是.net的问题,好像是数据库的并发控制的问题。
    在你的table1中有用到table2的数据吗?table2有加什么控制锁吗?如果有的话,在table1的事务没有commit前,table2至少被加了共享锁。table2自然就不允许被修改。
      

  8.   

    谢谢 Knight94(愚翁), 加个nolock就可以了 :)