我目前正在申请我的大学项目。数据库发生更改后,应用程序应通过电子邮件发送某种形式的通知。
有一个数据库的.mdf
文件,我用(localdb)
连接到它,查看和编辑数据集表和SQLDataAdapter
(如果重要与否,我不知道(。我正在尝试设置SqlDependency
,这样它就可以在表上检查新的标志,这样它可以发送关于带有这些标志的行的电子邮件。
问题是我无法使sqlDependency.OnChange
事件触发,Service Broker
已启用。启动应用程序后,我启动SqlDependency
,然后在SqlAdapter
方法中编辑和保存数据,数据在数据库中(在mdf文件中(发生更改,但没有事件触发器。我尝试了多个教程,但似乎都不适合我。下面是代码:
public void StartWatching()
{
SqlDependency.Stop(con.ConnectionString);
SqlDependency.Start(con.ConnectionString);
ExecuteWatchingQuery();
}
private void ExecuteWatchingQuery()
{
using (SqlConnection connection = new SqlConnection(con.ConnectionString))
{
connection.Open();
using (var command = new SqlCommand(
"select [id], [subject] from dbo.lots", connection))
{
var sqlDependency = new SqlDependency(command);
sqlDependency.OnChange += new OnChangeEventHandler(OnDatabaseChange);
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
Log_Text.AppendText("Watching... n");
}
else
{
Log_Text.AppendText("No rows found.");
}
}
}
}
private void OnDatabaseChange(object sender, SqlNotificationEventArgs args)
{[enter image description here][1]
SqlNotificationInfo info = args.Info;
if (SqlNotificationInfo.Insert.Equals(info)
|| SqlNotificationInfo.Update.Equals(info)
|| SqlNotificationInfo.Delete.Equals(info))
{
Log_Text.AppendText("Saw changes: n");
Watching();
}
ExecuteWatchingQuery();
}
来源:http://ts-soft.ru/blog/mssql-database-watching
[1] :https://i.stack.imgur.com/jyBOf.png表格
问题在于,编辑和监控都在同一个应用程序中完成,我不确定是否在同一连接上。我把应用程序分为两个(一个是数据库编辑,另一个是用于监控的控制台应用程序(,所有的应用程序都开始工作了。