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();
}
}
}