[转]用SQLDMO备份还原数据库

由于用SQL语句中的BACKUP DATABASE 数据库名 TO DISK =存储路径 在ASP.NET或其他编程语言中存在权限不够不能读写存储路径的问题 或者可以备份但在还原时由于正在打开数据库连接因此不能够正确还原
针对以上问题 可以通过SQLServer的SQLDMO.DLL来实现备份与还原
以下是从网络上找的材料写的ASP.NET中的备份与还原的类 经实验可以实现备份与还原
首先当然得添加引用 在网站-》添加引用 COM 找到 MICROSOFT SQLSERVER SQLDMO library 添加
然后添加一个类DBService
内容如下
using
System;
using
System.Data;
using
System.Configuration;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;


/**/
/// <summary>
/// DBService 的摘要说明
/// </summary>
public
class
DBService

...
{
public DBService()

...{
//
// TODO: 在此处添加构造函数逻辑
//
}

/**//// <summary>
/// 数据库备份
/// </summary>
/// <param name="sqlServer">SQLServer数据库服务器</param>
/// <param name="userid">用户名</param>
/// <param name="password">用户密码</param>
/// <param name="database">要备份的数据库</param>
/// <param name="filePath">存储备份文件路径</param>
/// <returns>是否备份成功</returns>
public static bool DbBackup(string sqlServer,string userid,string password,string database,string filePath)

...{
//声明变量isOk用来返回执行结果
bool isOk;
SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
try

...{
oSQLServer.LoginSecure = false;
oSQLServer.Connect(sqlServer,userid, password);
oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
oBackup.Database = database;
oBackup.Files = filePath;
oBackup.BackupSetName = database;
oBackup.BackupSetDescription = "数据库备份";
oBackup.Initialize = true;
oBackup.SQLBackup(oSQLServer);
isOk = true;//执行成功
}
catch

...{
isOk = false;//执行失败
throw;
}
finally

...{
oSQLServer.DisConnect();
}
//返回结果
return isOk;
}

/**//// <summary>
/// 数据库恢复
/// </summary>
/// <param name="sqlServer">SQLServer数据库服务器</param>
/// <param name="userid">用户名</param>
/// <param name="password">用户密码</param>
/// <param name="database">要还原的数据库</param>
/// <param name="filePath">存储备份文件路径</param>
/// <returns>是否还原成功</returns>
public static bool DbRestore(string sqlServer, string userid, string password, string database, string filePath)

...{
bool isOk;//变量用来返回执行结果
SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
try

...{
oSQLServer.LoginSecure = false;
oSQLServer.Connect(sqlServer, userid, password);
oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
oRestore.Database = database;
oRestore.Files = filePath;
oRestore.FileNumber = 1;
oRestore.ReplaceDatabase = true;
oRestore.SQLRestore(oSQLServer);
isOk = true;
}
catch

...{
isOk = false;
throw;
}
finally

...{
oSQLServer.DisConnect();
}
return isOk;
}
}