【问题标题】:'Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding.''执行超时已过期。在操作完成之前超时时间已过或服务器没有响应。
【发布时间】:2021-02-08 07:10:49
【问题描述】:

我想从选定的驱动器恢复数据库,但每次它都会引发以下异常

执行超时已过期。在操作完成之前超时时间已过或服务器没有响应。

但这仅适用于特定数据库,当我尝试恢复另一个数据库时,它可以完美运行。
谁能帮帮我。
以下代码我使用过

openFileDialog1.ShowDialog();
query("IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = '" + cmbDatabaseName.Text + "') DROP DATABASE " + cmbDatabaseName.Text + " RESTORE DATABASE " + cmbDatabaseName.Text + " FROM DISK = '" + openFileDialog1.FileName + "'");
lbmsg.Visible = true;
lbmsg.Text = "Database Backup file has been restore successfully";

【问题讨论】:

  • 为什么要在恢复之前删除数据库?这样做您什么都没有,但如果出现任何问题,您将丢失数据。这也可能是阻止呼叫的原因 - 如果有任何其他连接打开,DROP DATABASE 将无法继续。只需完全删除 IF ... DROP database 语句

标签: c# .net sql-server


【解决方案1】:

你的问题是 DROP DATABASE 因为它必须有一些连接。 将此命令放入您的代码中:ALTER DATABASE

query("    
            IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = '" + cmbDatabaseName.Text + "'); 
            ALTER DATABASE " + cmbDatabaseName.Text + " SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
            DROP DATABASE " + cmbDatabaseName.Text + "; 
            RESTORE DATABASE " + cmbDatabaseName.Text + " FROM DISK = '" + openFileDialog1.FileName + "';
");

【讨论】:

  • 我尝试了上述解决方案,但现在我得到了以下异常 System.Data.SqlClient.SqlException: 'Execution Timeout Expired。在操作完成之前超时时间已过或服务器没有响应。目前无法更改数据库“dbExpressPOS”的状态或选项。数据库处于单用户模式,并且当前有一个用户连接到它。'
  • 如果数据库切换到 SINGLE_USER 模式,那么您不能在任何其他会话中使用它。由系统管理员用户将其转回 MULTI_USER:
猜你喜欢
  • 2017-05-09
  • 2021-12-03
  • 1970-01-01
  • 2015-12-21
  • 2012-09-23
  • 2011-10-08
  • 2019-07-01
  • 2011-08-20
  • 1970-01-01
相关资源
最近更新 更多