在事务范围内创建和恢复数据库的问题?

时间:2011-07-15 05:09:26

标签: c# transactionscope

我有一个函数,我已经调用了一个存储过程来创建一个新的db并将现有的db恢复到新创建的db ..它没有事务范围正常工作但在事务范围内它给出了错误

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 个答案:

答案 0 :(得分:2)

嗯,错误很明显,这不会起作用...... "Cannot perform a backup or restore operation within a transaction."不是很模糊;选项:

  • 在事务之外执行tsql
  • 如果您可能已经有嵌套交易,请使用零交易TransactionScope(即TransactionScopeOption.Suppress

答案 1 :(得分:0)

只需在查询中删除“begin tran”,“Commit tran”,然后就可以了。