我想在每次数据库检测到更改时触发一个方法。我在控制台应用程序中尝试过:(数据库中的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”...控制台正在写入存在的每一行。因此,连接正在工作,但它没有检测到数据库中的新行
1条答案
按热度按时间kq0g1dla1#
没有什么可以阻止程序在执行一次之后停止。您可以在Main函数的右括号之前添加
Console.ReadLine()
语句。