Запись сведений в журнал приложений

Вы можете включить задачу «Скрипт» в пакет Microsoft SQL Server Integration Services (SSIS) для выполнения задачи. Например, задача может записать коллекцию сведений об переменных в журнал приложений Windows. Вы можете создать пакет служб SSIS, содержащий Поток данных задачу. Эта задача Поток данных включает преобразование "Число строк". Задачу "Скрипт" можно использовать для записи данных, которые были заполнены преобразованием "Число строк", в журнал приложений Windows.

В этой статье описывается, как использовать задачу скрипта для записи сведений в журнал приложений Windows.

Исходная версия продукта: SQL Server
Оригинальный номер базы знаний: 906560

Описание

В этом примере предполагается, что вы создали следующие элементы в пакете служб SSIS:

  • Задача Поток данных.
  • Задача скрипта.
  • Соединитель из задачи Поток данных в задачу «Скрипт».
  • В задаче Поток данных вы создали преобразование "Число строк" в потоке данных.

При запуске пакета преобразование "Число строк" возвращает данные о количестве строк, которые необходимо записать в журнал приложений Windows.

Настройка задачи «Скрипт»

Чтобы настроить пример кода задачи "Скрипт", выполните следующие действия в конструкторе служб SSIS:

  1. Пока вкладка Поток управления активна, щелкните правой кнопкой мыши область конструктора и выберите Переменные. В левой области появится окно Переменные .

  2. В окне Переменные выберите Добавить переменную, а затем укажите имя переменной в качестве mycount. По умолчанию типом данных новой переменной mycount является Int32.

    Примечание

    В ссылках на имена переменных учитывается регистр.

  3. Дважды щелкните задачу Поток данных. Активное окно переключается на вкладку Поток данных.

  4. Используйте свойства преобразования "Число строк", чтобы задать для свойства VariableName значение mycount.

  5. Перейдите на вкладку Поток управления и дважды щелкните задачу «Скрипт». Откроется диалоговое окно Редактор задачи «Скрипт ».

  6. В левой области выберите элемент Скрипт , а затем измените значение свойства ReadOnlyVariables на следующее:

    PackageName,StartTime,ExecutionInstanceGUID,mycount

    Примечание

    Элементы PackageName, StartTime и ExecutionInstanceGUID являются системными переменными. Эти системные переменные используются для записи сведений о пакете в журнал приложений Windows.

  7. В диалоговом окне Редактор задачи "Скрипт " выберите Изменить скрипт.

  8. При появлении нового окна Microsoft Visual Studio для приложений (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