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(); } } }
相关文章: