我的要求是创建临时表,然后执行一个存储过程,该过程将行插入临时表,然后删除临时表。 但是,如果执行此操作时出错,我希望始终将临时表放在最后。我知道使用企业库管理连接,无论如何,一旦连接关闭,表就会被删除。但是,只想看看是否可以使用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似乎无法访问临时表,这让我想到当出现错误时,事务范围是脱离背景或类似的东西。 有任何想法吗? 如何最好地处理这个?
答案 0 :(得分:1)
为了解决这个问题,我所做的是使用连接并重用它,而不是使用DBTransaction,因为Sybase(12和15)似乎不允许创建表命令作为同一事务的一部分。 / p>