C# DBTransaction与企业库

C# DBTransaction与企业库,c#,.net,enterprise-library,C#,.net,Enterprise Library,我的要求是创建临时表,然后执行存储过程,将行插入临时表,然后删除临时表。 但是,如果执行此操作时出现错误,我希望始终在末尾删除临时表。我知道,使用enterprise Library管理连接时,一旦连接关闭,表就会被删除。然而,我只是想看看是否有可能使用Try和Finally块来实现这一点。 同时支持Sybase和MS Sql。 例如: string preUploadSql = "create table #CHANGES ( Id numeric(18) identity not null)

我的要求是创建临时表,然后执行存储过程,将行插入临时表,然后删除临时表。 但是,如果执行此操作时出现错误,我希望始终在末尾删除临时表。我知道,使用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似乎无法访问temp表,这使我认为当出现错误时,事务范围超出了上下文或类似的内容。 有什么想法吗?
如何最好地处理这个问题?

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

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

+1使用DBTransaction+1的示例使用DBTransaction的示例