繁体   English   中英

无法在事务中执行备份或恢复操作。 BACKUP DATABASE 异常终止

[英]Cannot perform a backup or restore operation within a transaction. BACKUP DATABASE is terminating abnormally

我试图执行backUprestore我的应用程序的命令,它通过模拟EF6

对于我的备份,我创建了一个Sp ,你可以在这里看到:

CREATE PROCEDURE GetBackUp
    -- Add the parameters for the stored procedure here
    @address nvarchar(max)
AS
BEGIN
    BACKUP DATABASE [db-invoice-169] to DISK=@address
END
GO

在我的应用程序中,我称之为Sp

 private void Backup_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfd = new SaveFileDialog();
            string str_filename = string.Empty;
            sfd.FileName = "backup_database_" + DateTime.Now.ToShortDateString().Replace("/", "_");
            sfd.Filter = @"backup files(*.bak)|*.bak|all files(*.*)|*.*";
            sfd.FilterIndex = 1;
            sfd.OverwritePrompt = true;
            sfd.Title = "***save backup files***";
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                str_filename = sfd.FileName;
                backup(str_filename);
            }
        }
        private void backup(string str_filename)
        {
            try
            {
                this.Cursor = Cursors.WaitCursor;
                db.Database.ExecuteSqlCommand(@"EXEC [dbo].[back_up] @address = N'"+str_filename+"'");
                this.Cursor = Cursors.Default;
                MessageBox.Show("عملیات پشتیبان گیری موفقیت آمیز بود");
            }
            catch (Exception ex)
            {
                MessageBox.Show("عملیات پشتیبان گیری موفقیت آمیز نبود |" + ex.Message);
            }

        }

但我收到了这个错误:

无法在事务中执行备份或恢复操作。 BACKUP DATABASE 异常终止。

尝试更改此行:

db.Database.ExecuteSqlCommand(@"EXEC [dbo].[back_up] @address = N'"+str_filename+"'");

到:

db.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction, @"EXEC [dbo].[back_up] @address = N'"+str_filename+"'");

阿布拉尔

在备份代码之前试试这个

using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Suppress))
{
    // Add you backup query or your stuff
    ts.Complete();
}

根据 abrar 的回答,我在 SQLlocaldb 和 Entity Framework 中的还原过程中遇到了这个错误:

RESTORE cannot process database 'database' because it is in use by this session. It is recommended that the master database be used when performing this operation.
RESTORE DATABASE is terminating abnormally.

解决方案:

db.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction, @"USE master EXEC [dbo].[back_up] @address = N'"+str_filename+"'")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM