2010-08-02 136 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)似乎不允許創建表命令作爲同一事務的一部分。