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