如何使用TransactionScope类在不启动事务的情况下使用相同的连接?

时间:2015-05-18 07:36:07

标签: c# sql-server transactions temp-tables

我有一个存储过程A,它会创建一个global temporary table(前缀为##),并在其中插入一些临时数据。然后,我有一个使用此数据的存储过程B。因此,必须在同一会话(连接)期间调用AB。否则临时表将被删除。

我的数据库框架经常使用如下构造:

public T GetSomeData()
{
    using (var connection = OpenConnection())
    {
        // ...
    }
}

现在,我需要确保AB在同一连接上被称为 。我可以使用TransactionScope类轻松实现这一点,但这也意味着我做想要的事务。

using (var transaction = new TransactionScope())
{
    A();

    // Now B can read the temporary table created by A.
    // However, a transaction has been started which causes problems!
    B();

    // I don't want a transaction...
    // transaction.Complete();
}

我的问题是:如何使用此设计模式创建“连接范围”?

1 个答案:

答案 0 :(得分:0)

使用相同的DataReader读取多个结果集。

using(var reader = command.ExecuteReader())
{
    while(reader.Read())
    {
        A();
    }
    reader.NextResult();

    while(reader.Read())
    {
        B();
    }
}

使用相同的连接来获取两个结果集。