sql >> データベース >  >> RDS >> Sqlserver

データベースが更新されたときにプログラムに通知するにはどうすればよいですか?

    ポーリングデータベースはあまり洗練されたソリューションではありません。

    SqlDependency ADO.NETからはあなたの場合に役立ちます。ポーリングではなく通知メカニズムを使用します。通知はデータベースのServiceBrokerによって提供されるため、データベースでこのサービスを有効にする必要があります。 OnChange 指定されたテーブルが変更されるとイベントが発生します(更新、削除、挿入..)

    SqlDependencyの使用方法の例を次に示します。

    void Initialization()
    {
        // Create a dependency connection.
        SqlDependency.Start(connectionString, queueName);
    }
    
    void SomeMethod()
    {
        // Assume connection is an open SqlConnection.
    
        // Create a new SqlCommand object.
        using (SqlCommand command=new SqlCommand(
            "SELECT ShipperID, CompanyName, Phone FROM dbo.Shippers", 
            connection))
        {
    
            // Create a dependency and associate it with the SqlCommand.
            SqlDependency dependency=new SqlDependency(command);
            // Maintain the refence in a class member.
    
            // Subscribe to the SqlDependency event.
            dependency.OnChange+=new
               OnChangeEventHandler(OnDependencyChange);
    
            // Execute the command.
            using (SqlDataReader reader = command.ExecuteReader())
            {
                // Process the DataReader.
            }
        }
    }
    
    // Handler method
    void OnDependencyChange(object sender, 
       SqlNotificationEventArgs e )
    {
      // Handle the event (for example, invalidate this cache entry).
    }
    
    void Termination()
    {
        // Release the dependency.
        SqlDependency.Stop(connectionString, queueName);
    }
    

    http://msdn.microsoft.com/en-us/library/ 62xk7953.aspx

    Service Brokerを有効にする方法は次のとおりです(これを行うにはデータベースを排他的に使用することに注意してください。SQLサーバーの再起動後に行うのが最適です): http://blogs.sftsrc.com/stuart/archive/2007/06/13/42.aspx (リンク切れ)

    可能な代替リンク: http://technet。 microsoft.com/en-us/library/ms166086(v=sql.105).aspx



    1. Eloquentモデルで複雑な仮想列を作成するにはどうすればよいですか?

    2. 変数のmysql宣言の構文エラー

    3. JDBCで長時間実行されているクエリを停止または終了します

    4. 最後のxブログエントリ-ただし、ユーザーごとに1回のみ