【问题标题】:How do create the transaction for particular connection only in sql?如何仅在 sql 中为特定连接创建事务?
【发布时间】:2014-09-02 22:40:07
【问题描述】:

我只想在 sql 中为特定连接创建事务。它应该为所有连接锁定该表,但允许其他连接读取该表,即使事务已从另一个连接开始。我应该使用什么隔离级别。

Tran = CnnTran.BeginTransaction(IsolationLevel.RepeatableRead);            

【问题讨论】:

    标签: c# sql-server tsql


    【解决方案1】:

    对于选择查询,您可以使用WITH (NOLOCK)SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

    READ UNCOMMITTED:指定语句可以读取已被其他事务修改但尚未提交的行。因此,select 语句可以读取由其他未提交事务更新的行。因此,需要在要读取该表的其他连接上设置隔离级别。

    如果您愿意,可以在连接处设置:

    var myConnection = new SqlConnection();
    
    // connection for reading uncommitted transactions
    myConnection.BeginTransaction(IsolationLevel.ReadUncommitted).Commit();
    

    如果您愿意,也可以在事务中进行:

    using (var myConnection = new SqlConnection(connectionString)) {
        myConnection.Open();
        using (var transaction = myConnection.BeginTransaction(IsolationLevel.ReadUncommitted)) {
            // do stuff
            transaction.Commit();
        }
    }
    

    【讨论】:

    • 感谢您的回答,我如何在 C# 代码上实现它?
    • 我在那里添加了一些代码。此外,在您正在执行的 SQL 中,您可以使用 WITH (NOLOCK) 提示 - 这与 IsolationLevel.ReadUncommitted
    • 感谢示例让我试试这个。
    • 效果很好...谢谢哥们,你刚刚救了我的命,否则我必须花 3-4 天来管理它。
    • @Shell 没问题,很高兴为您提供帮助。
    猜你喜欢
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 2019-01-02
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多