mssql wcf 备份与恢复

sing System;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using SQLDMO;
using System.Threading;

[ServiceContract(Namespace ="Samples.Services")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
publicclass WCFServer
{
    [OperationContract]
    publicvoid DataBack()        //数据库备份     {
        System.Timers.Timer t =new System.Timers.Timer(5000);//实例化Timer类,设置间隔时间为10000毫秒;         t.Elapsed +=new System.Timers.ElapsedEventHandler(tt);//到达时间的时候执行事件;              t.AutoReset =true;//设置是执行一次(false)还是一直执行(true);         t.Enabled =true;//是否执行System.Timers.Timer.Elapsed事件;     }
    publicvoid tt(object sender, EventArgs e)
    {
        SQLDMO.Backup oBackup =new SQLDMO.BackupClass();
        SQLDMO.SQLServer oSQLServer =new SQLDMO.SQLServerClass();
        try
        {
            oSQLServer.LoginSecure =false;
            oSQLServer.Connect(".", "sa", "123");
            oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
            oBackup.Database ="MyBookShop";
            oBackup.Files =@"c:\databak.bak";
            oBackup.BackupSetName ="MyBookShopDB";
            oBackup.BackupSetDescription ="数据库备份";
            oBackup.Initialize =true;
            oBackup.SQLBackup(oSQLServer);
        }
        catch
        {
            throw;
        }
        finally
        {
            oSQLServer.DisConnect();
        }
    }


    [OperationContract]
    publicvoid DbRestore()        //数据库恢复     {
        System.Timers.Timer t =new System.Timers.Timer(10000);//实例化Timer类,设置间隔时间为10000毫秒;         t.Elapsed +=new System.Timers.ElapsedEventHandler(ee);//到达时间的时候执行事件;              t.AutoReset =true;//设置是执行一次(false)还是一直执行(true);         t.Enabled =true;//是否执行System.Timers.Timer.Elapsed事件;     }
    publicvoid  ee(object sender, System.Timers.ElapsedEventArgs e)
    {
        string strDbName ="MyBookShopDB";
        SQLDMO.Restore res =new SQLDMO.RestoreClass();
        SQLDMO.SQLServer svr =new SQLDMO.SQLServerClass();
        try
        {
            svr.LoginSecure =false;
            svr.Connect(".", "sa", "123");
            SQLDMO.QueryResults qr = svr.EnumProcesses(-1);
            int iColPIDNum =-1;
            int iColDbName =-1;
            res.Database = strDbName;

            for (int i =1; i <= qr.Columns; i++)
            {
                string strName = qr.get_ColumnName(i);
                if (strName.ToUpper().Trim() =="SPID")
                {
                    iColPIDNum = i;
                }
                elseif (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);
            }
            res.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
            res.Database = strDbName ; 
            res.Files =@"c:\databak.bak";
            res.FileNumber =1;
            res.ReplaceDatabase =true;
            res.SQLRestore(svr);    
           

        }
        catch (Exception err)
        {
            throw (new Exception("恢复数据库失败,请关闭所有和该数据库连接的程序!"+ err.Message));
        }
        finally
        {
            svr.DisConnect();
        }
    }
}
posted on 2011-12-08 10:58  武胜-阿伟  阅读(130)  评论(0编辑  收藏  举报