c# - 我想使用 C# 代码恢复 SQL Server 数据库
问题描述
我想选择还原路径,然后选择我的数据库备份文件并通过单击 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 语句失败。
将数据库上下文更改为“主”。
解决方案
你有两个问题
您的连接字符串提供的第一个凭据没有足够的权限来完成使数据库脱机的任务。
第二个是您尝试从客户端 PC-a 中选择 MDF/LDF 文件,而服务器端的文件系统不知道或无权访问该文件夹。
所以,我的回答是你需要尝试一些完全不同的东西。
尝试使用 SMO。网上有一篇文章轻轻地向读者介绍了SMO。
文章指向 GitHub 上的解决方案,其中包含您需要的一切。
这意味着一组用 .NET (C#) 编写的用于备份、恢复等的自动化程序。
所以,试试这个Programming SQL Server with SQL Server Management Objects Framework
推荐阅读
- python - CrawlerProcess 完成后如何获取统计值,即在 process.start() 之后的行
- java - 如何连接到连接到同一本地网络的用户并在 Android 应用程序中在他们之间共享信息
- angular - Angular 6 输入标签:无法重新声明块范围变量“ngDevMode”。ngx-标签输入
- python - sklearn make_scorer 函数的类型错误
- html - 没有协议或域路径的规范链接类型,使用正斜杠和文件扩展名自动生成
- angular - Angular Forms 为对象的每个属性创建控件
- data-warehouse - 这是在维度模型中使用桥接表的正确方法吗?
- html - 具有 vh 相对高度的父级的 HTML5 % 高度子级
- html - 使用VB.NET将网页表行中的值提取为字符串
- laravel - 如何在 Laravel 5 中使用 Codeception 在单元测试中模拟身份验证用户?