2011-07-15 70 views
1

我有一個函數,我已經調用了一個存儲過程來創建一個新的數據庫,並將一個現有的數據庫恢復到該新創建的數據庫中。它工作正常,沒有事務範圍,但在事務範圍內,它給出錯誤,如在事務範圍內創建和恢復數據庫的問題?

Cannot perform a backup or restore operation within a transaction. 
BACKUP DATABASE is terminating abnormally. 
Cannot perform a backup or restore operation within a transaction. 
RESTORE DATABASE is terminating abnormally 

示例代碼:

using (Transactions.TransactionScope scope = new Transactions.TransactionScope(TransactionScopeOption.Required, new TimeSpan(2, 0, 0))) 
{ 
if (flag == "Yes") 
{ 
SqlCommand cmddb = new SqlCommand("crt_crm_db_details", con); 
cmddb.CommandType = CommandType.StoredProcedure; 
cmddb.CommandTimeout = 0; 
cmddb.Parameters.Add("@custname", SqlDbType.NVarChar).Value = ccode; 
cmddb.Parameters.Add("@blank_dbname", SqlDbType.NVarChar).Value = _blankdbCrm; 
cmddb.Parameters.Add("@blank_bakpath", SqlDbType.NVarChar).Value = bakRestorePath; 
cmddb.Parameters.Add("@blank_mdfpath", SqlDbType.NVarChar).Value = mdfRestorePath; 
cmddb.Parameters.Add("@blank_ldfpath", SqlDbType.NVarChar).Value = ldfRestorePath; 
cmddb.Parameters.Add("@usercnt", SqlDbType.NVarChar).Value = userCountdb; 
SqlParameter Typedb = new SqlParameter("@errorid", SqlDbType.NVarChar); 
Typedb.Direction = ParameterDirection.Output; 
Typedb.Value = null; 
Typedb.Size = 50; 
cmddb.Parameters.Add(Typedb); 
try 
{ 
con.Open(); 
cmddb.ExecuteNonQuery(); 
} 
catch (Exception ex) 
{ 
VWLogger.LogMessage("Exception in crt_crm_db_details:", TraceEventType.Critical); 
VWLogger.LogMessage(ex, TraceEventType.Critical); 
return ex.Message; 
throw new CustomSoapException(CustomSoapException.ExceptionCode.AuthenticationException, ex.Message); 
} 
con.Close(); 
} 
scope.Complete(); 
return "Success"; 
} 

任何建議?

回答

2

那麼,錯誤是非常清楚,這是不會工作... "Cannot perform a backup or restore operation within a transaction."是不是很模糊;選項:

  • 執行TSQL交易
  • 之外,如果你可能已經有一個嵌套事務,使用零事務TransactionScope(即TransactionScopeOption.Suppress
+0

我有一些事務範圍內的10個方法..無法在事務範圍外單獨執行此tsql .. – bala3569

+0

@ bala3569那麼你不能執行它在所有。這個操作***不能在一個事務內完成...... –

+0

我已經嘗試過嵌套事務並且使用TransactionScopeOption.Suppress來處理這個tsql ..它工作正常,謝謝..有另外一個問題嗎? – bala3569

0

只不過是你刪除「開始過渡」 ,「Commit tran」在你的查詢中,那麼它會正常工作..