3

VB.NET我的工作有一个用编写的财务应用程序,SQL多个用户可以同时处理该应用程序。

在某些时候,一个用户可能决定发布他们(可能还有其他人)当前正在处理的一批条目。

显然,在Post 过程启动,我不再希望任何其他用户在该批次中添加编辑删除条目。

我已经看到我可以通过在 Post 过程开始时打开 SQL 事务来锁定所有数据,但是该过程可能相当长,我不希望在完成该功能可能需要的几分钟内打开事务.

有没有办法只锁定我知道需要从 VB.NET 代码操作的记录?

4

4 回答 4

2

如果您使用的是 Oracle,您将选择更新您锁定的行。

这是一个例子

SELECT address1 , city, country
FROM location
FOR UPDATE;
于 2008-09-05T15:48:46.837 回答
1

您可能希望为整个事务设置隔离级别,而不是在特定表上 使用with (rowlock) 。

看看这个页面:http:
//msdn.microsoft.com/en-us/library/ms173763.aspx

具体来说,在其中搜索“行锁”,我想你会发现 READ COMMITTED 或 REPEATABLE READ 是你想要的。READ COMMITTED 是 SQL Server 的默认值。如果 READ COMMITTED 对您来说似乎不够强大,请选择 REPEATABLE READ。

更新: 阅读您的一篇后续文章后,您肯定想要可重复阅读。这将保持锁定,直到您提交或回滚事务。

于 2008-09-05T16:00:07.997 回答
0

添加

with (rowlock)

到您的 SQL 查询

SQL Server 性能文章

编辑:好的,我误解了这个问题。你想要的是事务隔离。+1 乔尔 :)

于 2008-09-05T15:36:44.200 回答
0

将其包装在 tran 在选择中使用 holdlock + updlock

例子

begin tran
select * from
SomeTable (holdlock,updlock)
where ....


processing here

commit
于 2008-09-09T16:32:56.370 回答