gpt4 book ai didi

sql-server - 是否可以在事务发生时选择数据?

转载 作者:行者123 更新时间:2023-12-02 12:39:54 26 4
gpt4 key购买 nike

我正在使用 transactionscope 来确保数据正确读取到数据库中。但是,我可能需要在事务运行时选择一些数据(从另一个页面)。可以这样做吗?我对数据库非常菜鸟。

我正在使用 LinqToSQL 和 SQL Server 2005(dev)/2008(prod)。

最佳答案

是的,在事务运行时仍然可以从数据库中选择数据。

不受事务影响的数据(例如表中未更新的行)通常可以从其他事务中读取。 (在某些情况下,SQL Server 会引入表锁来停止对表中所有行的读取,但这种情况并不常见,而且通常是查询或服务器上发生其他情况的症状)。

您需要查看Transaction Isolation Levels因为它们准确地控制了这种行为的工作方式。

以下是设置事务范围隔离级别的 C# 代码。

TransactionOptions option = new TransactionOptions();        
options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
using (TransactionScope sc = new TransactionScope(TransactionScopeOption.Required, options)
{
// Code within transaction
}

一般来说,根据事务上指定的事务隔离级别(或任何表提示,如 NOLOCK),您将获得不同级别的数据锁定,以保护应用程序的其余部分免受事务中绑定(bind)的事件的影响。例如,使用 READUNCOMMITTED 的事务隔离级别,您可以在该事务中发生写入时看到它们。这允许脏读,但也可以防止(大多数)数据锁定。

天平的另一端是像SERIALIZABLE这样的隔离级别,它确保您的事务事件在提交之前是完全隔离的。

关于sql-server - 是否可以在事务发生时选择数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1918810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com