アプリケーション ログに情報を書き込む

Microsoft SQL Server Integration Services (SSIS) パッケージにスクリプト タスクを指定することで、タスクを実行できます。 たとえば、タスクを使用して、変数情報のコレクションを Windows アプリケーション ログに書き込むことができます。 データ フロー タスクを含む SSIS パッケージを作成できます。 このデータ フロー タスクには、行数変換が含まれています。 スクリプト タスクを使用すると、行数変換によって入力されたデータを Windows アプリケーション ログに書き込むことができます。

この記事では、スクリプト タスクを使用して Windows アプリケーション ログに情報を書き込む方法について説明します。

元の製品バージョン: SQL Server
元の KB 番号: 906560

説明

この例では、SSIS パッケージに次の要素が作成されていることを前提としています。

  • データ フロー タスク。
  • スクリプト タスク。
  • データ フロー タスクからスクリプト タスクへのコネクタ。
  • データ フロー タスクで、データ フローに行数変換を作成しました。

パッケージを実行すると、行数変換によって、Windows アプリケーション ログに書き込む必要がある行数データが返されます。

スクリプト タスクの構成

スクリプト タスクのコード サンプルを構成するには、SSIS デザイナーで次の手順を実行します。

  1. [制御フロー] タブがアクティブな状態で、デザイン画面を右クリックし、[変数] を選択します。 [変数] ウィンドウが左ペインに表示されます。

  2. [変数] ウィンドウで [変数の追加] を選択し、変数名を「mycount」にします。 既定では、新しい mycount 変数のデータ型は Int32 です。

    注意

    変数名への参照は大文字と小文字が区別されます。

  3. [データ フロー タスク] をダブルクリックします。 アクティブなウィンドウが [データ フロー] タブに切り替わります。

  4. 行数変換のプロパティを使用して、VariableName プロパティの値を mycount に設定します。

  5. [制御フロー] タブを選択し、[スクリプト タスク] をダブルクリックします。 [スクリプト タスク エディター] ダイアログ ボックスが表示されます。

  6. 左ペインで、[スクリプト] 項目を選択し、ReadOnlyVariables プロパティの値を次の値に変更します。

    PackageName,StartTime,ExecutionInstanceGUID,mycount

    注意

    PackageNameStartTimeExecutionInstanceGUID の各項目はシステム変数です。 これらのシステム変数は、パッケージ情報を Windows アプリケーション ログに書き込むのに使用されます。

  7. [スクリプト タスク エディター] ダイアログ ボックスで、[スクリプトの編集] を選択します。

  8. 新しい Microsoft Visual Studio for Applications (VSTA) ウィンドウが表示されたら、次の手順に従います。

    1. 他の宣言の前に、次の名前空間がコードに含まれていることを確認します。

      Imports System 
      Imports System.Data
      Imports System.Math
      Imports System.Diagnostics
      Imports Microsoft.SqlServer.Dts.Runtime
      
    2. 次のコード サンプルを、Main() メソッドのコードに置き換えます。

      Dim varMyCount As Variable = Dts.Variables("mycount") '
      Dim varPackageName As Variable = Dts.Variables("PackageName")
      Dim varStartTime As Variable = Dts.Variables("StartTime")
      Dim varInstanceID As Variable = Dts.Variables("ExecutionInstanceGUID")
      Dim PackageDuration As Long
      '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      ' Event log needs
      '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      Dim sSource As String
      Dim sLog As String
      Dim sEventMessage As String
      Dim sMachine As String
      '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      PackageDuration = DateDiff("s", varStartTime.Value, Now())
      sSource = "RowCountReporting from SSIS"
      ' We need the message posted to the Application event log.
      sLog = "Application"
      sEventMessage = "Rows Processed: " & Chr(10) _
      & " case Rows:" + varMyCount.Value().ToString + Chr(10) _
      & "=============================================" & Chr(10) _
      & "The Package: " + varPackageName.Value().ToString _
      & Chr(10) _
      & "Started: " & varStartTime.Value().ToString _
      & Chr(10) _
      & "Current Time:" & System.DateTime.Now _
      & Chr(10) _
      & "=============================================" _
      & Chr(10) _
      & "Package Run Duration in seconds: " & PackageDuration _
      & Chr(10) _
      & "Execution GUID: " & varInstanceID.Value().ToString
      sMachine = "."
      If Not EventLog.SourceExists(sSource, sMachine) Then
      EventLog.CreateEventSource(sSource, slog)
      End If
      Dim ELog As New EventLog(sLog, sMachine, sSource)
      Dim category As Short = 2
      ' ELog.WriteEntry("Write from third source", 4, 777, 2)
      ELog.WriteEntry(sEventMessage, EventLogEntryType.Information, 777, category)
      '###############################
      Dts.TaskResult = ScriptResults.Success
      

    パッケージが正常に実行されると、Windows アプリケーション ログに次のエントリが表示されます。

       Log Name: Application
       Source: RowCountReporting from SSIS
       Date: 12/20/2022 11:21:38 AM
       Event ID: 777
       Task Category: (2)
       Level: Information
       Keywords: Classic
       User: N/A
       Computer: <hostname>
       Description:
       Rows Processed:
       case Rows:0
       =============================================
       The Package: Package
       Started: 12/20/2022 11:21:37 AM
       Current Time:12/20/2022 11:21:38 AM
       =============================================
       Package Run Duration in seconds: 1
       Execution GUID: {9DF22831-E608-47F7-BD62-F9BD3C2F9C77}
       Event Xml:
       <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
       <System>
       <Provider Name="RowCountReporting from SSIS" />
       <EventID Qualifiers="0">777</EventID>
       <Version>0</Version>
       <Level>4</Level>
       <Task>2</Task>
       <Opcode>0</Opcode>
       <Keywords>0x80000000000000</Keywords>
       <TimeCreated SystemTime="2022-12-20T17:21:38.5070621Z" />
       <EventRecordID>122603</EventRecordID>
       <Correlation />
       <Execution ProcessID="41588" ThreadID="0" />
       <Channel>Application</Channel>
       <Computer><hostname>/Computer>
       <Security />
       </System>
       <EventData>
       <Data>Rows Processed:
       case Rows:0
       =============================================
       The Package: Package
       Started: 12/20/2022 11:21:37 AM
       Current Time:12/20/2022 11:21:38 AM
       =============================================
       Package Run Duration in seconds: 1
       Execution GUID: {9DF22831-E608-47F7-BD62-F9BD3C2F9C77}</Data>
       </EventData>
       </Event>
    

リファレンス

EventLog.WriteEntry Method (System.Diagnostics)

EventSource イベントを作成するコードをインストルメント化する