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