【问题标题】:I want to restore a SQL Server database using C# code我想使用 C# 代码恢复 SQL Server 数据库
【发布时间】:2019-10-02 16:39:52
【问题描述】:

我想选择还原路径,然后选择我的数据库备份文件并通过单击 Visual Studio 2019 中的按钮进行还原。

下面有一些我已经写过的代码,但是我得到了一个错误。

string connection = ConfigurationManager.ConnectionStrings["dbx"].ConnectionString;

SqlConnection con = new SqlConnection(connection);
con.Open();

String sqlquery = "Use Master ALTER DATABASE databasename SET OFFLINE WITH ROLLBACK IMMEDIATE RESTORE DATABASE FHMTailorDB FROM DISK ='" + RestoreTextBox.Text + "' ALTER DATABASE databasename SET ONLINE WITH ROLLBACK IMMEDIATE";

SqlCommand cmd = new SqlCommand(sqlquery, con);
cmd.ExecuteNonQuery();

con.Close();
con.Dispose();

lblError.Text = "Database Restore successfully";

错误:

System.Data.SqlClient.SqlException: '用户无权更改数据库'databasename',数据库不存在,或数据库未处于允许访问检查的状态。

ALTER DATABASE 语句失败。

文件“F:\FHMTailorManager\FHMTailorDB.mdf”的目录查找失败,操作系统错误2(系统找不到指定的文件。)。

文件“FHMTailorDB”无法恢复到“F:\FHMTailorManager\FHMTailorDB.mdf”。使用 WITH MOVE 确定文件的有效位置。

文件“F:\FHMTailorManager\FHMTailorDB_log.ldf”的目录查找失败,操作系统错误2(系统找不到指定的文件。)。

文件“FHMTailorDB_log”无法恢复到“F:\FHMTailorManager\FHMTailorDB_log.ldf”。使用 WITH MOVE 标识文件的有效位置。 在规划 RESTORE 语句时发现了问题。以前的消息提供了详细信息。

RESTORE DATABASE 异常终止。

用户无权更改数据库“数据库名称”,数据库不存在,或数据库未处于允许访问检查的状态。

ALTER DATABASE 语句失败。

将数据库上下文更改为“主”。

【问题讨论】:

  • 我见过很多这样的事情。不要备份会导致权限更改。而是在权限不变的情况下使用 Deattach 和 Atttach。您需要管理员来修复权限。

标签: c# sql-server smo


【解决方案1】:

你有两个问题

您的连接字符串提供的第一个凭据没有足够的权限来完成使数据库脱机的任务。

第二个是您试图从您的客户端 PC-a 中选择 MDF/LDF 文件,而服务器端的文件系统不知道或无权访问该文件夹。

所以,我的回答是你需要尝试一些完全不同的东西。

尝试使用 SMO。网上有一篇文章轻轻地向读者介绍了SMO。

文章指向 GitHub 上的解决方案,其中包含您需要的一切。

这意味着一组用 .NET (C#) 编写的用于备份、恢复等的自动化程序。

所以,试试这个Programming SQL Server with SQL Server Management Objects Framework

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多