|M| 第二贴:如何在ASP.NET 中创建和删除SQL作业
如题
------解决方案--------------------通过程序操作作业没有用过,也很少见,更没有见过相关的资料,建议LZ可以上些国外的网站看看
------解决方案--------------------学习下。。
------解决方案--------------------通过sql自带的作业可以实现。
------解决方案--------------------数据库中的作业一般用来批处理,定时出发
参照ide的用户导航界面很好实现的,lz摸索试试
------解决方案--------------------可以把建立和删除作业的语句放在SQL SERVER的存储过程中,在ASP.NET中调用相应的存储过程即可。
------解决方案----------------------定义创建作业
DECLARE @jobid uniqueidentifier, @jobname sysname
SET @jobname = N '作业名称 '
IF EXISTS(SELECT * FROM msdb.dbo.sysjobs WHERE name=@jobname)
EXEC msdb.dbo.sp_delete_job @job_name=@jobname
EXEC msdb.dbo.sp_add_job
@job_name = @jobname,
@job_id = @jobid OUTPUT
--定义作业步骤
DECLARE @sql nvarchar(4000),@dbname sysname
SELECT @dbname=DB_NAME(), --作业步骤在当前数据库中执行
@sql=N '--作业步骤内容 ' --一般定义的是使用TSQL处理的作业,这里定义要执行的Transact-SQL语句
EXEC msdb.dbo.sp_add_jobstep
@job_id = @jobid,
@step_name = N '作业步骤名称 ',
@subsystem = 'TSQL ', --步骤的类型,一般为TSQL
@database_name=@dbname,
@command = @sql
--创建调度(使用后面专门定义的几种作业调度模板)
EXEC msdb..sp_add_jobschedule
@job_id = @jobid,
@name = N '调度名称 ',
@freq_type=4, --每天
@freq_interval=1, --指定每多少天发生一次,这里是1天.
@freq_subday_type=0x8, --重复方式,0x1=在指定的时间,0x4=多少分钟,0x8=多少小时执行一次
@freq_subday_interval=1, --重复周期数,这里每小时执行一次
@active_start_date = NULL, --作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD
@active_end_date = 99991231, --作业执行的停止日期,默认为99991231,格式为YYYYMMDD
@active_start_time = 00000, --作业执行的开始时间,格式为HHMMSS
@active_end_time = 235959 --作业执行的停止时间,格式为HHMMSS
------解决方案--------------------c#实现:
string strBackup = string.Empty;
SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
SQLDMO.Job oJob = new SQLDMO.JobClass();
SQLDMO.JobSchedule oJobSchedule = new SQLDMO.JobScheduleClass();
SQLDMO.JobStep oJobStep = new SQLDMO.JobStepClass();
try
{
oSQLServer.LoginSecure = false;
oSQLServer.Connect(this.txtComputer.Text,this.txtUser.Text,this.txtPassword.Text);
oJobSchedule.Name = "a ";
oJobSchedule.Schedule.ActiveStartDate = int.Parse(DateTime.Now.ToString( "yyyyMMdd "));
oJobSchedule.Schedule.ActiveStartTimeOfDay = 230000;
oJobSchedule.Schedule.FrequencyType = SQLDMO.SQLDMO_FREQUENCY_TYPE.SQLDMOFreq_Daily;
oJobSchedule.Schedule.FrequencyInterval=1;
strBackup = "declare @strDateTime varchar(100) " +
"select @strDateTime=convert(char(8),getdate(),112)+ '_ ' +replace(convert(varchar(10),getdate(),108), ': ', ' ') "+
"declare @str varchar(100) " +
"set @str = 'd:\\ " + this.txtDatabase.Text + "_ '+@strDateTime+ '.bak ' " +
"backup database " + this.txtDatabase.Text + " to disk=@str ";
oJobStep.Command = strBackup;
oJobStep.DatabaseName = this.txtDatabase.Text;
oJobStep.StepID =1;
oJobStep.Name = "step " + DateTime.Now.ToString( "yyyyMMddHHmmss ");
oJob.Name = "job " + DateTime.Now.ToString( "yyyyMMddHHmmss ");
oSQLServer.JobServer.Jobs.Add(oJob);