.net 如何使用SqlDependency和c#检测数据库更改

xxhby3vn  于 2023-01-06  发布在  .NET
关注(0)|答案(1)|浏览(178)

我想在每次数据库检测到更改时触发一个方法。我在控制台应用程序中尝试过:(数据库中的ServiceBroker处于活动状态)

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

namespace SqlDependencyExample
{
    class Program
    {
        static void Main(string[] args)
        {
            
            string connectionString = "xxx";
            SqlConnection connection = new SqlConnection(connectionString);
            connection.Open();

            using (SqlCommand command = new SqlCommand(
            "SELECT [ID], [Name] FROM [dbo].[Users]", connection))
            {
                SqlDependency dependency = new SqlDependency(command);
   
                SqlDependency.Start(connectionString);
                
                dependency.OnChange += new OnChangeEventHandler(OnDependencyChange);
                
                using (SqlDataReader reader = command.ExecuteReader())
                {                   
                    while (reader.Read())
                    {
                        Console.WriteLine("ID: {0}, Name: {1}", reader.GetInt32(0), reader.GetString(1));
                    }
                }
            }
        }
        private static void OnDependencyChange(object sender, SqlNotificationEventArgs e)
        {
            
            Console.WriteLine("Database change detected.");
            //Fire something
        }
    }
}

但问题是,应用程序启动后立即写入“检测到数据库更改”,然后关闭,当我在数据库中添加一行时,它没有处理“OnDependencyChange”...控制台正在写入存在的每一行。因此,连接正在工作,但它没有检测到数据库中的新行

kq0g1dla

kq0g1dla1#

没有什么可以阻止程序在执行一次之后停止。您可以在Main函数的右括号之前添加Console.ReadLine()语句。

相关问题