다음을 통해 공유


이벤트 전송 저장 프로시저 사용

Notification Services에서는 단일 이벤트 또는 이벤트 일괄 처리를 전송할 수 있도록 하는 이벤트 수집 저장 프로시저를 제공합니다. 이러한 저장 프로시저를 사용하여 Transact-SQL 코드를 통해 이벤트를 전송할 수 있습니다. 이러한 저장 프로시저를 수동으로 실행하거나, 저장 프로시저를 Microsoft SQL Server 에이전트 작업에서 실행하거나, 다른 테이블에 대한 삽입 또는 업데이트 작업의 응답으로 쿼리를 실행하도록 이러한 저장 프로시저를 트리거에서 사용할 수 있습니다.

이벤트 데이터 전송

하나의 저장 프로시저 집합을 사용하여 이벤트 일괄 처리를 열고 하나 이상의 이벤트를 개별적으로 전송한 후 이벤트 일괄 처리를 닫을 수 있습니다. 다음 저장 프로시저를 사용하여 Notification Services 응용 프로그램으로 개별 이벤트를 전송합니다.

  • NSEventBeginBatchEventClassName은 이벤트 데이터를 전송하는 이벤트 공급자의 이름을 입력 인수로 사용하고 새 이벤트 일괄 처리의 일괄 처리 ID를 반환합니다.
  • NSEventWriteEventClassName은 이벤트 일괄 처리에 단일 이벤트를 추가합니다. 이러한 저장 프로시저 인수는 이벤트 일괄 처리 ID와 이벤트 필드에 대한 값 목록입니다.
  • NSEventFlushBatchEventClassName은 이벤트 일괄 처리를 닫고 이벤트 집합을 응용 프로그램으로 전송합니다.

Notification Services가 일괄 처리를 열고 이벤트를 전송한 후 일괄 처리를 닫는 작업을 한 트랜잭션으로 실행할 수 있도록 이러한 모든 저장 프로시저를 동일한 트랜잭션에서 실행해야 합니다.

자세한 내용 및 예를 보려면 다음 저장 프로시저 항목을 참조하십시오.

쿼리를 사용하여 이벤트 수집 및 전송

SELECT 문을 사용하여 이벤트를 수집하려면 NSEventSubmitBatchEventClassName 저장 프로시저를 사용할 수 있습니다. 이 저장 프로시저는 사용자가 정의한 쿼리를 사용하여 이벤트를 수집하는 쿼리와 이벤트 수집 후에 실행할 수집 후 쿼리(포스트 쿼리) 등 2가지 쿼리를 사용합니다. 이 포스트 쿼리를 사용하면 동일한 데이터를 다시 수집하지 않도록 추적 필드를 "new"에서 "collected"로 변경하는 등의 필요한 정리 작업을 수행할 수 있습니다.

자세한 내용 및 예를 보려면 NSEventSubmitBatch<EventClassName>(Transact-SQL)를 참조하십시오.

응용 프로그램에서 이벤트 전송 저장 프로시저 사용

관리 코드와 비관리 코드 둘 다에서 이벤트 수집 저장 프로시저를 실행할 수 있습니다. 관리 코드 내에서 저장 프로시저를 실행하는 일반적인 방법은 SqlCommand 개체를 사용하는 것입니다. SqlCommand 개체에서 저장 프로시저와 해당 인수를 지정한 후 해당 ExecuteNonQuery 메서드를 사용하여 프로시저를 실행할 수 있습니다.

예: 단일 이벤트 추가

이 예에서는 다음 네임스페이스를 사용합니다.

public bool EventSPs()
{ 
    // These variables would normally be defined for
    // the class. They would be set based on the values
    // provided by the args argument of the Initialize method.
    string instanceName = "Tutorial";
    string applicationName = "Weather";
    string eventClassName = "WeatherEvents";
    string eventProviderName = "WeatherSPs";

    bool returnValue = true;
    SqlConnection databaseConnection = null;

    try
    {
        // Set the connection to SQL Server.
        databaseConnection = new SqlConnection();
        // Build the connection string.
        StringBuilder connectBuilder = new StringBuilder();
        connectBuilder.Append("Integrated Security=SSPI;");
        connectBuilder.Append("Data Source=MyServer;");
        connectBuilder.Append("Initial Catalog=TutorialWeather");
        databaseConnection.ConnectionString =
            connectBuilder.ToString();
        // Open the connection.
        databaseConnection.Open();

        // Use NSEventBeginBatchEventClassName
        // to create a new event batch and return the ID.
        SqlCommand databaseCommand = new SqlCommand(string.Format
            ("\"NSEventBeginBatch{0}\"", eventClassName));
        databaseCommand.Connection = databaseConnection;
        databaseCommand.CommandType = CommandType.StoredProcedure;
        databaseCommand.Parameters.AddWithValue
            ("@ProviderName", eventProviderName);
        SqlParameter storedProcParameter =
            databaseCommand.Parameters.Add
            ("@EventBatchId", SqlDbType.BigInt);
        storedProcParameter.Direction = ParameterDirection.Output;
        databaseCommand.ExecuteNonQuery();
        long eventBatchId =
            (long)databaseCommand.Parameters["@EventBatchId"].Value;

        // Use NSEventWriteEventClassName
        // to write the event to the database.
        databaseCommand.Parameters.Clear();
        databaseCommand.CommandText =
            string.Format("\"NSEventWrite{0}\"", eventClassName);
        databaseCommand.Parameters.AddWithValue("@EventBatchId", 
            eventBatchId);
        databaseCommand.Parameters.AddWithValue("@City", "Redmond");
        databaseCommand.Parameters.AddWithValue("@Date", "4/5/05");
        databaseCommand.Parameters.AddWithValue("@Low", 50.0);
        databaseCommand.Parameters.AddWithValue("@High", 55.5);
        databaseCommand.Parameters.AddWithValue("@Forecast", 
            "Partly cloudy");
        Console.WriteLine(databaseCommand.CommandText);
        databaseCommand.ExecuteNonQuery();

        // Use NSEventFlushBatchEventClassName
        // to commit the event batch.
        databaseCommand.Parameters.Clear();
        databaseCommand.CommandText =
            string.Format("\"NSEventFlushBatch{0}\"", eventClassName);
        databaseCommand.Parameters.AddWithValue("@EventBatchId", 
            eventBatchId);
        long eventsSubmitted = (long)databaseCommand.ExecuteScalar();
    }
    catch(SqlException ex)
    {
        Console.WriteLine(ex);
    }
    finally
    {
        if (null != databaseConnection)
        {
            databaseConnection.Close();
            databaseConnection = null;
        }
    }
    return true;
}

예: 다중 이벤트 추가

이 예에서는 다음 네임스페이스를 사용합니다.

  • System
  • System.Text
  • System.Data
  • System.Data.SqlClient
  • Microsoft.SqlServer.NotificationServices
public bool EventQuery()
{
    // These variables would normally be defined for
    // the class. They would be set based on the values
    // provided by the args argument of the Initialize method.
    string instanceName = "Tutorial";
    string applicationName = "Weather";
    string eventClassName = "WeatherEvents";
    string eventProviderName = "WeatherSPs";

    StringBuilder builder =
        new StringBuilder("SELECT City, GetDate() AS Date, ");
    builder.Append("Low, High, Forecast ");
    builder.Append("FROM dbo.WeatherData;");
    string eventsQuery = builder.ToString();

    bool returnValue = true;
    SqlConnection databaseConnection = null;

    try
    {

        // Set the connection to SQL Server.
        databaseConnection = new SqlConnection();
        // Build the connection string.
        StringBuilder connectBuilder = new StringBuilder();
        connectBuilder.Append("Integrated Security=SSPI;");
        connectBuilder.Append("Data Source=MyServer;");
        connectBuilder.Append("Initial Catalog=TutorialWeather");
        databaseConnection.ConnectionString =
            connectBuilder.ToString();
        // Open the connection.
        databaseConnection.Open();

        // Use NSEventSubmitBatchEventClassName
        // to create and submit a batch of events.
        SqlCommand databaseCommand = new SqlCommand(string.Format
            ("\"NSEventSubmitBatch{0}\"", eventClassName));
        databaseCommand.Connection = databaseConnection;
        databaseCommand.CommandType = CommandType.StoredProcedure;
        databaseCommand.Parameters.AddWithValue
            ("@ProviderName", eventProviderName);
        databaseCommand.Parameters.AddWithValue("@EventsQuery", 
            eventsQuery);
        databaseCommand.Parameters.AddWithValue("@PostQuery", " ");
        long eventsInBatch = (long)databaseCommand.ExecuteScalar();
    }
    catch (SqlException ex)
    {
        Console.WriteLine(ex);
    }
    finally
    {
        if (null != databaseConnection)
        {
            databaseConnection.Close();
            databaseConnection = null;
        }
    }
    return true;
}

참고 항목

관련 자료

사용자 지정 이벤트 공급자 개발
Notification Services 저장 프로시저(Transact-SQL)

도움말 및 정보

SQL Server 2005 지원 받기