VB.NET我的工作有一个用编写的财务应用程序,SQL多个用户可以同时处理该应用程序。
在某些时候,一个用户可能决定发布他们(可能还有其他人)当前正在处理的一批条目。
显然,在Post 过程启动后,我不再希望任何其他用户在该批次中添加、编辑或删除条目。
我已经看到我可以通过在 Post 过程开始时打开 SQL 事务来锁定所有数据,但是该过程可能相当长,我不希望在完成该功能可能需要的几分钟内打开事务.
有没有办法只锁定我知道需要从 VB.NET 代码操作的记录?
VB.NET我的工作有一个用编写的财务应用程序,SQL多个用户可以同时处理该应用程序。
在某些时候,一个用户可能决定发布他们(可能还有其他人)当前正在处理的一批条目。
显然,在Post 过程启动后,我不再希望任何其他用户在该批次中添加、编辑或删除条目。
我已经看到我可以通过在 Post 过程开始时打开 SQL 事务来锁定所有数据,但是该过程可能相当长,我不希望在完成该功能可能需要的几分钟内打开事务.
有没有办法只锁定我知道需要从 VB.NET 代码操作的记录?
如果您使用的是 Oracle,您将选择更新您锁定的行。
这是一个例子
SELECT address1 , city, country
FROM location
FOR UPDATE;
您可能希望为整个事务设置隔离级别,而不是在特定表上 使用with (rowlock) 。
看看这个页面:http:
//msdn.microsoft.com/en-us/library/ms173763.aspx
具体来说,在其中搜索“行锁”,我想你会发现 READ COMMITTED 或 REPEATABLE READ 是你想要的。READ COMMITTED 是 SQL Server 的默认值。如果 READ COMMITTED 对您来说似乎不够强大,请选择 REPEATABLE READ。
更新: 阅读您的一篇后续文章后,您肯定想要可重复阅读。这将保持锁定,直到您提交或回滚事务。
将其包装在 tran 在选择中使用 holdlock + updlock
例子
begin tran
select * from
SomeTable (holdlock,updlock)
where ....
processing here
commit