DBTransaction和企业库

时间:2010-08-02 16:02:49

标签: c# .net enterprise-library

我的要求是创建临时表,然后执行一个存储过程,该过程将行插入临时表,然后删除临时表。 但是,如果执行此操作时出错,我希望始终将临时表放在最后。我知道使用企业库管理连接,无论如何,一旦连接关闭,表就会被删除。但是,只想看看是否可以使用Try和Finally块执行此操作。 支持Sybase和MS Sql。 所以对于例如:

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似乎无法访问临时表,这让我想到当出现错误时,事务范围是脱离背景或类似的东西。 有任何想法吗? 如何最好地处理这个?

1 个答案:

答案 0 :(得分:1)

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