首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过C#代码恢复Server数据库

如何通过C#代码恢复Server数据库
EN

Stack Overflow用户
提问于 2010-11-18 19:57:04
回答 5查看 38.8K关注 0票数 20

我试图像这样恢复数据库:

代码语言:javascript
复制
SQL = @"RESTORE DATABASE MyDataBase TO DISK='d:\MyDATA.BAK'";
                Cmd = new SqlCommand(SQL, Conn);
                Cmd.ExecuteNonQuery();
                Cmd.Dispose();

但我总是会犯错:

Msg 3102,16级,状态1,第7行

还原无法处理数据库'MyDataBase‘,因为此会话正在使用它。建议在执行此操作时使用主数据库。

Msg 3013,16级,状态1,第7行

还原数据库正在异常终止。

EN

回答 5

Stack Overflow用户

发布于 2010-11-18 20:13:43

我更喜欢使用SMO恢复备份:

代码语言:javascript
复制
Microsoft.SqlServer.Management.Smo.Server smoServer = 
     new Server(new ServerConnection(server));

Database db = smoServer.Databases['MyDataBase'];
string dbPath = Path.Combine(db.PrimaryFilePath, 'MyDataBase.mdf');
string logPath = Path.Combine(db.PrimaryFilePath, 'MyDataBase_Log.ldf');
Restore restore = new Restore();
BackupDeviceItem deviceItem = 
    new BackupDeviceItem('d:\MyDATA.BAK', DeviceType.File);
restore.Devices.Add(deviceItem);
restore.Database = backupDatabaseTo;
restore.FileNumber = restoreFileNumber;
restore.Action = RestoreActionType.Database;
restore.ReplaceDatabase = true;
restore.SqlRestore(smoServer);

db = smoServer.Databases['MyDataBase'];
db.SetOnline();
smoServer.Refresh();
db.Refresh();

您需要对Microsoft.SqlServer.Smo、Microsoft.SqlServer.SmoExtended和Microsoft.SqlServer.Management.Sdk.Sfc的引用

票数 17
EN

Stack Overflow用户

发布于 2010-11-18 20:00:29

您的DB连接最有可能与您试图还原的数据库连接。因此,有一个DB共享锁,它阻止您的db的恢复。

尝尝这个

代码语言:javascript
复制
SQL = @"USE master BACKUP DATABASE MyDataBase TO DISK='d:\MyDATA.BAK'";

或更改连接详细信息以使用主DB。

票数 15
EN

Stack Overflow用户

发布于 2010-11-18 19:59:55

必须通过不同的数据库连接到数据库服务器。

所以您的连接字符串应该让您在服务器上说"Master“或其他数据库,然后您就可以完成手头的任务了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4218960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档