2010-08-02 96 views
1

我的要求是创建临时表,然后执行一个存储过程,它将行插入临时表中,然后删除临时表。 但是,如果在执行此操作时发生错误,我想始终在临时表中删除临时表。我知道企业库存管理连接,无论如何连接关闭后,表将被丢弃。然而,只是想看看是否可以使用Try和Finally块来做到这一点。 同时支持Sybase和MS Sql。 因此,对于如:DBTransaction和企业库

string preUploadSql = "create table #CHANGES (Id numeric(18) identity not null)"; 
string postUploadSql = "drop table #CHANGES"; 
bCommand.CommandText = preUploadSql + "; " exec sp_update ;"; 

DbConnection dbConnection = DataAccessHelper.CreateConnection(); 
if (dbConnection.State != ConnectionState.Open) 
{ 
    dbConnection.Open(); 
} 
DbTransaction dbTransaction = dbConnection.BeginTransaction(); 

try 
{ 
    DataAccessHelper.ExecuteNonQuery(dbCommand, dbTransaction); 
} 
finally 
{ 
    dbCommand.CommandText = postUploadSql; 
    DataAccessHelper.ExecuteNonQuery(dbCommand, dbTransaction); 
    dbTransaction.Commit(); 
    if (dbConnection.State == ConnectionState.Open) 
    { 
    dbConnection.Close(); 
    } 
} 

是这样的可能,当我尝试这一点,如果有错误,在最后块dbtransaction似乎没有访问临时表,让我想到当出现错误时,事务范围超出​​上下文或类似的范围。 任何想法? 如何最好地处理这个问题?

+0

+1使用DbTransaction的示例 – Liam 2012-10-02 09:19:24

回答

1

为了解决这个问题,我所做的是使用连接和重用,而不是使用DBTransaction,因为Sybase(12和15)似乎不允许创建表命令作为同一事务的一部分。