我有一个存储过程A
,它会创建一个global temporary table(前缀为##
),并在其中插入一些临时数据。然后,我有一个使用此数据的存储过程B
。因此,必须在同一会话(连接)期间调用A
和B
。否则临时表将被删除。
我的数据库框架经常使用如下构造:
public T GetSomeData()
{
using (var connection = OpenConnection())
{
// ...
}
}
现在,我需要确保A
和B
在同一连接上被称为 。我可以使用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();
}
我的问题是:如何使用此设计模式创建“连接范围”?
答案 0 :(得分:0)
使用相同的DataReader读取多个结果集。
using(var reader = command.ExecuteReader())
{
while(reader.Read())
{
A();
}
reader.NextResult();
while(reader.Read())
{
B();
}
}
使用相同的连接来获取两个结果集。