代码:
SET TRANSACTION ISOLATION LEVEL repeatable read
BEGIN TRAN select * from test_tb WITH(READPAST,ROWLOCK,UPDLOCK) where id=1..................
这里取出记录过后。
要进行界面操作。
COMMIT TRAN
update test_tb set uname='oooo' where id=1==============================================================================
当读取数据过后,在界面操作的同时。另一台电脑电脑执行SQL语句。
update test_tb set uname='xxx' where id=3
出现,超时的提示。(也就是不能DELETE,UPDATE,INSERT)
而SELECT则没问题。可能是把整个表给锁定了。================================我现在要做的就是取出一条记录,并锁定这条记录。
一直到界面操作完毕过后。但是操作界面期间,另外的电脑会出现不能DELETE,UPDATE,INSERT的情况。
SET TRANSACTION ISOLATION LEVEL repeatable read
BEGIN TRAN select * from test_tb WITH(READPAST,ROWLOCK,UPDLOCK) where id=1..................
这里取出记录过后。
要进行界面操作。
COMMIT TRAN
update test_tb set uname='oooo' where id=1==============================================================================
当读取数据过后,在界面操作的同时。另一台电脑电脑执行SQL语句。
update test_tb set uname='xxx' where id=3
出现,超时的提示。(也就是不能DELETE,UPDATE,INSERT)
而SELECT则没问题。可能是把整个表给锁定了。================================我现在要做的就是取出一条记录,并锁定这条记录。
一直到界面操作完毕过后。但是操作界面期间,另外的电脑会出现不能DELETE,UPDATE,INSERT的情况。
BEGIN TRAN
select * from test_tb WITH(ROWLOCK) where id=1
update test_tb WITH(ROWLOCK,HOLDLOCK) set uname='oooo' where id=1COMMIT TRAN而且也应该写一个事务里面比较好
我尽量详细说一下我的环境和操作。表:test_TB
++++++++++++++++++++++++
ID uName sFlag
1 user1 0
2 user2 0
3 user3 0
.....
++++++++++++++++++++++++++
===================================
要实现的功能是这样的。
我的程序连接到MSSQL数据库test_tb这个表。
当我读出第一条记录的时候,锁定不能让任何程序操作这一条记录。
(包括,SELECT,UPDATE,INSERT,DELETE)
除了第一条记录,任何程序都可以操作包括SELECT ,UPDATE,INSERT,DELETE
操作完第一条记录后,我会把第一条标实为已操作。=========================================我的代码如下:
1:已经在ID上面建了一个索引。
2:读取这个表的SQL:
SET TRANSACTION ISOLATION LEVEL repeatable read
BEGIN TRAN select * from test_tb WITH(ROWLOCK) where id=1
3:在界面上输入一个uName的值。然后按下BUTTON。进入更改事件。
SQL如下:
COMMIT TRAN
update test_tb set uName='EDIT的值' where id=1在第2步和第3步的时候,任何程序都是读不到id=1的记录。这个我喜欢。就是要这效果。
因为怕它们读到就会显示给用户操作。用户就会输入。不管你提交成不成果。用户是会劳动的。
所以我没有在SELECT完了就COMMIT TRAN
问题现在出在这里:
在第2步和第3步,还有一个第三方软件会UPDATE这个表的其它数据。
可是一UPDATE就会出错。提示超时。
如果把COMMIT TRAN放在SELECT完了后,就不会出现这样的问题。我应该怎么样解决这个问题呢???向SQL77大哥请教了。能给出具体的代码吗??
我对这块真的不了解。都弄了一天了!!!
楼主的编程语言应该有事务啊,把sql77的t_sql代码改成楼主的编程语言啊。
update test_tb set uName='EDIT的值' where id=1
COMMIT TRAN
吗 ?
BEGIN TRAN
select .........
这里是界面操作。
点BUTTON开始的事件代码:COMMIT TRAN
BeginTRAN
UPdate....
COMMIT TRAN
----------------------------
我代码功能就是这样实现的,ID要建索引。还有个第三方程序也要访问数据库。是DONET的DLL库。
修改他其中的UPDATE,INSERT,DELETE。
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BeginTRAN
update[insert,delete]......
COMMIT TRAN=========================
目前一切正常。。再次感谢高手。
先结贴了!!!!受溢不少!