SQL Server备份和从C#恢复问题

时间:2011-07-03 06:34:51

标签: c# sql-server tsql sql-server-2008 .net-4.0

我在C#中编写了一个使用SQL 2008的程序。

我想备份数据库并将其恢复。我的备份代码工作正常,但恢复不起作用,数据库成为单个用户。

收到以下错误:

  

数据库日志的尾部   “医生”没有得到支持。使用   用NORECOVERY备份日志备份   日志,如果它包含你没有的工作   想要输。使用WITH REPLACE或   RESTORE的WITH STOPAT子句   声明只是覆盖了   日志的内容。 RESTORE DATABASE   正在异常终止。   正在进行不合格的交易   回滚。估计回滚

我的代码:

private void Backup(string strFileName)
{
    try
    {
        string command = @"BACKUP DATABASE doctor TO DISK='"+ strFileName+"'";
        SqlCommand oCommand = null;
        SqlConnection oConnection = null;
        oConnection = new SqlConnection("Data Source=.;Initial Catalog=doctor;Integrated Security=True");
        if (oConnection.State != ConnectionState.Open)
        oConnection.Open();
        oCommand = new SqlCommand(command, oConnection);
        oCommand.ExecuteNonQuery();


    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}   

private void Restore(string strFileName)
{
    try
    {
        string command = "ALTER DATABASE doctor SET SINGLE_USER with ROLLBACK IMMEDIATE " + "use master " + " RESTORE DATABASE doctor FROM DISK='" + strFileName + "'";
        SqlCommand oCommand = null;
        SqlConnection oConnection = null;
        oConnection = new SqlConnection("Data Source=.;Initial Catalog=doctor;Integrated Security=True");
        if (oConnection.State == ConnectionState.Closed)
        {
            oConnection.Open();
            oCommand = new SqlCommand(command, oConnection);
            oCommand.ExecuteNonQuery();               
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

3 个答案:

答案 0 :(得分:1)

我想如果你结束

  

“WITH REPLACE”

使用恢复字符串可以正常工作。

答案 1 :(得分:1)

您遇到的错误是MSSQLSERVER_3159错误,可以在

上找到解释和用户操作

msdn : MSSQLSERVER_3159 documentation

希望它有所帮助。

答案 2 :(得分:0)

您的数据库似乎正在使用完全恢复模式,并且在正常情况下需要进行日志备份。

根据您的情况,Nima的答案可能就足够了。

有关该主题的更多信息,请参阅MSND上的以下主题: