Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SqlDependency tidak mengaktifkan acara OnChange saat kumpulan data diubah

SqlDependency dihapus setelah acara diaktifkan sehingga Anda perlu menjalankan perintah lagi dengan dependensi. Di bawah ini adalah contoh aplikasi konsol yang akan berlangganan lagi kecuali pemberitahuan itu karena kesalahan.

using System;
using System.Data;
using System.Data.SqlClient;

namespace SqlDependencyExample
{
    class Program
    {

        static string connectionString = @"Data Source=.;Initial Catalog=YourDatabase;Application Name=SqlDependencyExample;Integrated Security=SSPI";

        static void Main(string[] args)
        {

            SqlDependency.Start(connectionString);

            getDataWithSqlDependency();

            Console.WriteLine("Waiting for data changes");
            Console.WriteLine("Press enter to quit");
            Console.ReadLine();

            SqlDependency.Stop(connectionString);

        }

        static DataTable getDataWithSqlDependency()
        {

            using (var connection = new SqlConnection(connectionString))
            using (var cmd = new SqlCommand("SELECT Col1, Col2, Col3 FROM dbo.MyTable;", connection))
            {

                var dt = new DataTable();

                // Create dependency for this command and add event handler
                var dependency = new SqlDependency(cmd);
                dependency.OnChange += new OnChangeEventHandler(onDependencyChange);

                // execute command to get data
                connection.Open();
                dt.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection));

                return dt;

            }

        }

        // Handler method
        static void onDependencyChange(object sender,
           SqlNotificationEventArgs e)
        {

            Console.WriteLine($"OnChange Event fired. SqlNotificationEventArgs: Info={e.Info}, Source={e.Source}, Type={e.Type}.");

            if ((e.Info != SqlNotificationInfo.Invalid)
                && (e.Type != SqlNotificationType.Subscribe))
            {
                //resubscribe
                var dt = getDataWithSqlDependency();

                Console.WriteLine($"Data changed. {dt.Rows.Count} rows returned.");
            }
            else
            {
                Console.WriteLine("SqlDependency not restarted");
            }

        }


    }
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. UNION hasil dari beberapa prosedur tersimpan

  2. PARSE() vs TRY_PARSE() di SQL Server:Apa Bedanya?

  3. Cara Mendapatkan OBJECT_NAME() dari Database Berbeda di SQL Server

  4. Dapatkah saya menggunakan ADFS 2.0 untuk mengautentikasi pengguna tertentu terhadap SQL Server?

  5. Cara Membuat Pernyataan Drop Table untuk semua tabel dalam database - Tutorial SQL Server / T-SQL Bagian 48