这可能是一个愚蠢的问题,但请帮我解释一下。
我有一个带有表的SQL
数据库,只要表中有行添加/删除/更新..(任何操作),就应该通过在系统中运行的桌面c#
应用程序提供通知托盘。
SQL SERVER
中已有通知邮件发送机制 但我不想通过邮件通知。
下面的邮件通知屏幕:
即使通过管理工作室修改数据库,还有更好的方法通过应用程序获取通知吗?
我曾经检查过行数,如果有计数则会收到通知 增加/减少我会收到有关插入/删除的通知 行。
但那并不适用于更新!
修改1:
如果可能存在针对 SqlDependency 的this Stack Overflow post answer等限制情况的可能性,该如何克服?
答案 0 :(得分:1)
答案 1 :(得分:0)
我为你做了一个小样本
为每个表创建一个插入,更新和删除的触发器。也许为每个表使用History表,这样也可以记录所有更改
按如下方式创建表
Create Table Notifications
(
Id bigint Identity(1,1) Not null,
TableName nvarchar(250),
ChangedOn DateTime,
Notified bit
)
每次触发事件时,请在通知表中写入以下值:
Insert Into Notifications
(TableName, ChangedOn, Notified)
Values
('YourTableName', GetDate(), 0)
使用easy计时器创建一个应用程序,该计时器将定期检查表值,如下所示:
即:C#
private List<Notification> _notificationsToShow;
Private void DoNotify()
{
var notifs = Notifications.Where(t=> !t.Notified).ToList();
if(notifs.Count > 0)
{
_notificationsToShow.AddRange(notifs);
foreach(var Notification in notifs)
{
//Save to database as user is notified
Notification.Notified = true;
Notification.Save();
}
}
DoSomethingAlertish();
}
private void DoSomethingAlertish()
{
if(_notificationToShow.Count == 0 || _notificationToShow == null)
return;
var s = new StringBuilder();
foreach(var v in _notificationToShow)
{
s.AppendLine(v.TableName);
}
alert(s.ToString());
}
//Create an event that will empty the list (user must do trigger this action)
private void UserNotifiedAction()
{
_notificationToShow = new List<Notification>();
DoSomethingAlertish();
}
此方法的缩小如下:
必须创建每个表触发器的。这意味着每个表有3个触发器
所以当你有一个小应用程序,例如15个表时,这已经意味着创建了45个触发器,现在确实考虑了1000个表的情况,你明白了。
另外,请注意,通知表会像疯子一样增长。所以也许你需要偶尔清理它。
良好部分是在创建所有触发器并将值存储在表中之后,您可以使用任何可用的技术来创建通知。你现在想要它在托盘栏中,也许将来你仍然想要一个邮件,一切都在运行并收集你所有的价值,你必须考虑的唯一部分就是用什么技术来调用它。
我希望我能为您提供一个可以在将来帮助您的解决方案。再一次,你问的解决方案可能更简单,但这取决于你未来的目标。