0

我需要在带有 SQL Server 2008 的新服务器上迁移通知 DTS 包。我在 VB.net 中创建了脚本,以便可以将其作为 SSIS 脚本任务放在那里。我收到以下错误:System.InvalidOperationException:行/列不存在数据

我的代码如下:

JobRuningCon = New OleDbConnection(connstr)
JobRuningCon.Open()

' Query to check whether there are any failed jobs for the client
SQL1 = "select message,  [LastRunDate] = convert(varchar, cast(cast([msdb]..sysjobhistory.RUN_DATE as varchar) as datetime), 101),[LastRunTime] =STUFF(STUFF(RIGHT('000000'+CONVERT(VARCHAR(8), [msdb]..sysjobhistory.RUN_TIME), 6), 5, 0, ':'), 3, 0, ':'),[RunDuration] =STUFF(STUFF(RIGHT('000000'+CONVERT(VARCHAR(8), [msdb]..sysjobhistory.RUN_DURATION), 6), 5, 0, ':'), 3, 0, ':')  from msdb..sysjobhistory WITH (NOLOCK) where (step_name like " & Chr(39) & ClientName(i) & Chr(37) & "Nightly Update" & Chr(39) & " OR step_name like " & Chr(39) & ClientName(i) & Chr(37) & "ACN_CIRCULAR_MANAGER" & Chr(39) & ")" & " and run_date like" & Chr(39) & runDate & Chr(39) & ""

JobRuningCom = New OleDbCommand(SQL1, JobRuningCon)
JobRuningComReader = JobRuningCom.ExecuteReader
JobRuningCon.Close()

JobFailureCon = New OleDbConnection(connstr)
JobFailureCon.Open()

' Query to check whether there is any history for tonights job.. if it doesnt exists it might  mean the job is still running
SQL2 = "select step_name,message, LastRunDate = convert(varchar, cast(cast([msdb]..sysjobhistory.RUN_DATE as varchar) as datetime), 101), LastRunTime =STUFF(STUFF(RIGHT('000000'+CONVERT(VARCHAR(8), [msdb]..sysjobhistory.RUN_TIME), 6), 5, 0, ':'), 3, 0, ':'), RunDuration =STUFF(STUFF(RIGHT('000000'+CONVERT(VARCHAR(8), [msdb]..sysjobhistory.RUN_DURATION), 6), 5, 0, ':'), 3, 0, ':')  from msdb..sysjobhistory WITH (NOLOCK)  where  (step_name like " & Chr(39) & ClientName(i) & Chr(37) & "Nightly Update" & Chr(39) & " OR step_name like " & Chr(39) & ClientName(i) & Chr(37) & "ACN_CIRCULAR_MANAGER" & Chr(39) & ")" & "and run_date like" & Chr(39) & runDate & Chr(39) & "and run_status=0"

JobFailureCom = New OleDbCommand(SQL2, JobFailureCon)
JobFailureComReader = JobFailureCom.ExecuteReader
JobRuningCon.Close()

JobSuccessCon = New OleDbConnection(connstr)
JobSuccessCon.Open()

' Query to check whether there are any successful jobs for the client
SQL3 = "select step_name,message,  convert(varchar, cast(cast([msdb]..sysjobhistory.RUN_DATE as varchar) as datetime), 101) as LastRunDate, LastRunTime =STUFF(STUFF(RIGHT('000000'+CONVERT(VARCHAR(8), [msdb]..sysjobhistory.RUN_TIME), 6), 5, 0, ':'), 3, 0, ':'), RunDuration =STUFF(STUFF(RIGHT('000000'+CONVERT(VARCHAR(8), [msdb]..sysjobhistory.RUN_DURATION), 6), 5, 0, ':'), 3, 0, ':')  from msdb..sysjobhistory WITH (NOLOCK) where step_name like " & Chr(39) & ClientName(i) & Chr(37) & "Nightly Update" & Chr(39) & " and run_date like" & Chr(39) & runDate & Chr(39) & "and run_status=1"

JobSuccessCom = New OleDbCommand(SQL3, JobSuccessCon)
JobSuccessComReader = JobSuccessCom.ExecuteReader
JobSuccessCon.Close()

ServerNameCon = New OleDbConnection(connstr)
ServerNameCon.Open()
SQLServerName = "select @@servername as sname"

ServerNameCom = New OleDbCommand(SQL3, ServerNameCon)
ServerNameComReader = ServerNameCom.ExecuteReader
ServerNameCon.Close()

PrevFailCountCon = New OleDbConnection(connstr)
PrevFailCountCon.Open()
SQL4 = "select  count(distinct RUN_DATE) as failcount  from sysjobhistory WITH (NOLOCK) where step_name like " & Chr(39) & ClientName(i) & Chr(37) & " nightly update" & Chr(39) & " and run_date>(select max(run_date)from sysjobhistory where step_name like " & Chr(39) & ClientName(i) & Chr(37) & " nightly update" & Chr(39) & " and run_status=1)"

PrevFailCountCom = New OleDbCommand(SQL4, PrevFailCountCon)
PrevFailCountComReader = PrevFailCountCom.ExecuteReader

PrevFailCountCon.Close()
LastSuccessCon = New OleDbConnection(connstr)

LastSuccessCon.Open()
SQL5 = "select convert(varchar, cast(cast([msdb]..sysjobhistory.RUN_DATE as varchar) as datetime), 101) as LastRunDate, LastRunTime =STUFF(STUFF(RIGHT('000000'+CONVERT(VARCHAR(8), [msdb]..sysjobhistory.RUN_TIME), 6), 5, 0, ':'), 3, 0, ':'), RunDuration =STUFF(STUFF(RIGHT('000000'+CONVERT(VARCHAR(8), [msdb]..sysjobhistory.RUN_DURATION), 6), 5, 0, ':'), 3, 0, ':')  from msdb..sysjobhistory WITH (NOLOCK) where step_name like " & Chr(39) & ClientName(i) & Chr(37) & "Nightly Update" & Chr(39) & " and run_date = (select MAX(run_date) from msdb..sysjobhistory WITH (NOLOCK) where run_status=1and step_name like" & Chr(39) & ClientName(i) & Chr(37) & "Nightly Update" & Chr(39) & ")"

LastSuccessCom = New OleDbCommand(SQL5, LastSuccessCon)
LastSuccessComReader = LastSuccessCom.ExecuteReader

LastSuccessCon.Close()
Failure_20Con = New OleDbConnection(connstr)
Failure_20Con.Open()

SQL6 = "(select count(*) as No_Of_Failure from msdb..sysjobhistory WITH (NOLOCK) where step_name like " & Chr(39) & ClientName(i) & Chr(37) & "Nightly Update" & Chr(39) & ")"

Failure_20Com = New OleDbCommand(SQL6, Failure_20Con)
Failure_20comReader = Failure_20Com.ExecuteReader

Failure_20Con.Close()

Fail_20 = Failure_20comReader.Item("No_Of_Failure")
JobCompletionStatus = ""

While JobRuningComReader.Read
     JobCompletionStatus = JobRuningComReader.Item("message")
End While

' While LastSuccessComReader.Read
' LastDate = LastSuccessComReader.Item("LastRunDate") & "  " & LastSuccessComReader.Item("LastRunTime")
'End While

LastDate = LastSuccessComReader.Item("LastRunDate") & "  " & LastSuccessComReader.Item("LastRunTime")

'Check whether the job has failed more than 20 days
If Fail_20 = 0 Then
    JobStatus = "<p><PRE><font face=Verdana size=1><b> " & ClientName(i) & "</b>" & "<font Color=RED face=Verdana size=2 >  " & " This job has failed more than 20 days.Please Check </br> </PRE></font></font></p>"

' Check whether the job is still running or not. If there are no records for a particular day, it means the job is still running.
ElseIf JobCompletionStatus = "" Then
    JobStatus = "<p><PRE><font face=Verdana size=1><b> " & ClientName(i) & "</b>" & "<font Color=RED face=Verdana size=1>  " & " :There is no record for this job today. The job might have failed to start or might be still running. Please Check. </br> The Last Successful run was on " & LastDate & " </PRE></font></font></p>"
    CountInProgress = CountInProgress + 1

Else
    ' If there is a record then check whether the job is a failure or not
    JobFailureStatus = ""

    While JobFailureComReader.Read
        LastRunDate1 = JobFailureComReader.Item("LastRunDate")
        LastRunTime1 = JobFailureComReader.Item("LastRunTime")
        RunDuration1 = JobFailureComReader.Item("RunDuration")

        While PrevFailCountComReader.Read
            prefailCount = PrevFailCountComReader.Item("failcount")
        End While

        JobFailureStatus = "<p><b><PRE><font face=Verdana size=1>  " & ClientName(i) & "</b>         " & LastRunDate1 & "    " & LastRunTime1 & "          " & RunDuration1 & "        " & "<font Color=RED> FAILED              </font>" & prefailCount & "</br>" & "</br></p><p></br><font Color=RED size=2> The job failed at step: " & JobFailureComReader.Item("step_name") & "" & "  Message: " & "<font Color=RED size=2> Please Check.</PRE></font></p><p>The Last Successful run was on " & LastDate & " </p>"
        CountFailure = CountFailure + 1

    End While
    JobStatus = JobFailureStatus

    If JobFailureStatus = "" Then
        ' Checks whether the job was a success or not.
        While JobSuccessComReader.Read
            LastRunDate1 = JobSuccessComReader.Item("LastRunDate")
            LastRunTime1 = JobSuccessComReader.Item("LastRunTime")
            RunDuration1 = JobSuccessComReader.Item("RunDuration")

            JobStatus = "<p><b><PRE><font face=Verdana size=1>  " & ClientName(i) & "</b>           " & LastRunDate1 & "    " & LastRunTime1 & "          " & RunDuration1 & "            " & "<font Color=green> SUCCEEDED</font>        NA</font></PRE></p>"

            CountSuccess = CountSuccess + 1
        End While
        JobStatus = JobStatus
    End If
End If
4

0 回答 0