110,534
社区成员
发帖
与我相关
我的任务
分享
if (MessageBox.Show("您要备份数据库吗?", "备份数据库", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
try
{
oSQLServer.LoginSecure = false;
oSQLServer.Connect("PC201012291333", "sa", "");//PC201012291333是我的机器名,sa没有设置密码
oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
oBackup.Database = "db_mhjg";//这是我的数据库名
oBackup.Files = @"C:\Documents and Settings\Administrator\桌面\123.bak";//这是我的备份文件路径和名称
oBackup.BackupSetName = "db_mhjg";
oBackup.BackupSetDescription = "数据库备份";
oBackup.Initialize = true;
oBackup.SQLBackup(oSQLServer);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
finally
{
oSQLServer.DisConnect();
}
SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();
try
{
svr.Connect("PC201012291333", "sa", "");
SQLDMO.QueryResults qr = svr.EnumProcesses(-1);
int iColPIDNum = -1;
int iColDbName = -1;
for (int i = 1; i <= qr.Columns; i++)
{
string strName = qr.get_ColumnName(i);
if (strName.ToUpper().Trim() == "SPID")
{
iColPIDNum = i;
}
else if (strName.ToUpper().Trim() == "DBNAME")
{
iColDbName = i;
}
if (iColPIDNum != -1 && iColDbName != -1)
break;
}
for (int i = 1; i <= qr.Rows; i++)
{
int lPID = qr.GetColumnLong(i, iColPIDNum);
string strDBName = qr.GetColumnString(i, iColDbName);
if (strDBName.ToUpper() == strDbName.ToUpper())
svr.KillProcess(lPID);
}
SQLDMO.Restore res = new SQLDMO.RestoreClass();
res.Action = 0;
res.Files = @"C:\Documents and Settings\Administrator\桌面\123.bak";//123.bak是已经被分好的数据库名字
res.Database = db_mhjg;//要备份的数据库
res.ReplaceDatabase = true;
res.SQLRestore(svr);
return true;
}
catch (Exception err)
{
throw (new Exception("恢复数据库失败,请关闭所有和该数据库连接的程序!" + err.Message));
//return false ;
//MessageBox.Show("恢复数据库失败,请关闭所有和该数据库连接的程序!"+err.Message);
}
finally
{
svr.DisConnect();
}
备份
//引用SQLDMO.dll,SQLDMO由Microsoft SQL Server自带的SQLDMO.dll提供,SQLDMO.dll是一个COM对象
SQLDMO.Backup backup=new SQLDMO.BackupClass();
SQLDMO.SQLServer sqlserver=new SQLDMO.SQLServerClass();
sqlserver.LoginSecure=false;
sqlserver.Connect( "localhost ", "sa ", "1 ");
backup.Action=SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
backup.Database= "userdb ";
backup.Files=@ "E:\Project\meng\data\userdb.bak ";
backup.BackupSetName= "userdb ";
backup.BackupSetDescription= "数据库备份 ";
backup.Initialize=true;
backup.SQLBackup(sqlserver);
}
//还原
SQLDMO.Restore restore=new SQLDMO.RestoreClass();
SQLDMO.SQLServer sqlserver=new SQLDMO.SQLServerClass();
sqlserver.LoginSecure=false;
sqlserver.Connect( "192.168.19.25 ", "sa ", "sa "); restore.Action=SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
restore.Database= "userdb ";
restore.Files=@ "E:\Project\meng\data\userdb.bak ";
restore.BackupSetName= "userdb ";
restore.FileNumber=1;
restore.SQLRestore(sqlserver);
#region 还原数据库
/// <summary>
/// 恢复数据库,恢复前杀死所有与本数据库相关进程
/// </summary>
/// <param name="strDbName">数据库名</param>
/// <param name="strFileName">存放路径</param>
/// <param name="pgbMain"></param>
/// <returns></returns>
public bool RestoreDB(string strDbName, string strFileName)
{
SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();
try
{
svr.Connect(ServerName, UserName, Password);
//取得所有的进程列表
SQLDMO.QueryResults qr = svr.EnumProcesses(-1);
int iColPIDNum = -1;
int iColDbName = -1;
//找到和要恢复数据库相关的进程
for (int i = 1; i <= qr.Columns; i++)
{
string strName = qr.get_ColumnName(i);
if (strName.ToUpper().Trim() == "SPID")
{
iColPIDNum = i;
}
else if (strName.ToUpper().Trim() == "DBNAME")
{
iColDbName = i;
}
if (iColPIDNum != -1 && iColDbName != -1)
break;
}
//将相关进程杀死
for (int i = 1; i <= qr.Rows; i++)
{
int lPID = qr.GetColumnLong(i, iColPIDNum);
string strDBName = qr.GetColumnString(i, iColDbName);
if (strDBName.ToUpper() == strDbName.ToUpper())
svr.KillProcess(lPID);
}
SQLDMO.Restore res = new SQLDMO.RestoreClass();
res.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
res.Files = strFileName;
res.Database = strDbName;
res.FileNumber = 1;
res.ReplaceDatabase = true;
res.SQLRestore(svr);
return true;
}
catch (Exception err)
{
//throw (new Exception("" + err.Message));
ShowError("恢复数据库失败,请关闭所有和该数据库连接的程序!" + err.Message);
return false;
}
finally
{
svr.DisConnect();
}
}
#endregion