將資訊寫入應用程式記錄檔

您可以在 Microsoft SQL Server Integration Services (SSIS) 套件中包含指令碼工作來執行工作。 例如,工作可能會將變數資訊的集合寫入 Windows 應用程式記錄檔。 您可以建立包含資料流程工作的 SSIS 套件。 此資料流程工作包含資料列計數轉換。 您可以使用指令碼工作,將資料列計數轉換所填入的資料寫入 Windows 應用程式記錄檔。

本文說明如何使用指令碼工作,將資訊寫入 Windows 應用程式記錄檔。

原始產品版本:SQL Server
原始 KB 編號:906560

Description

此範例假設您已在 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 方法 (System.Diagnostics)

檢測程式碼以建立 EventSource 事件