插入新数据库行后获取警报。

时间:2012-09-11 12:47:57

标签: c# sql-server

我创建了一个将SMS文本存储到数据库表中的应用程序。因为我无法预测何时会收到短信;我需要找到一种方法来在数据库表中添加新行时收到通知。我正在使用MSSQLServer 2005和一个使用C#的Windows表单应用程序。有人可以建议我这样做吗?谢谢。

6 个答案:

答案 0 :(得分:3)

你不能使用触发器,尽管压倒性的声音支持这种错误的方式,至少不要直接通知应用程序。触发器无法连接回应用程序以通知更改,并且“使用套接字”或“使用邮件”等解决方案充其量是天真的,并且在真实条件下它们会在火焰中失败。

你基本上有三种选择:

  • 池进行更改。最容易实现,只需定期查询以查看是否出现了新记录。缺点是1)有时难以检测到变化,这取决于您的数据模型架构和2)在延迟和负载之间难以实现平衡,即。你应该多久轮询一次。

  • 通知表单插入应用程序。那些记录是由应用程序插入的,有插入记录的代码也通知你的应用程序。需要更改通常不受您控制的代码。

  • 使用Query Notifications

第四种方法是使用触发器将消息发送到本地队列,并让应用程序专用于后台的WAITFOR(RECEIVE...)等待(这与轮询不同),但最好通过利用Query来完成通知和SqlDependency

答案 1 :(得分:2)

您可以使用triggers结合DatabaseMail发送电子邮件提醒您。

答案 2 :(得分:0)

是的,使用INSERT触发器。

以下是Stackoverflow文章:SQL Server 2008 - Help writing simple INSERT Trigger

以下是T-SQL参考:http://msdn.microsoft.com/en-us/library/ms189799.aspx

答案 3 :(得分:0)

最适合的解决方案是插入后的TRIGGER

答案 4 :(得分:0)

你没有在你的问题中提供足够的细节,但我假设你的意思是一行被插入到数据库中(不知何故)你希望c#应用程序知道它? (否则,就像许多其他人所说的那样使用触发器)

在这些情况下,我会考虑让数据库通过udp或tcp / ip发送某种“ping”,并在c#应用程序中编写相应的侦听器组件。

我只是用Google搜索了一些相关链接,似乎是http://www.codeproject.com/Articles/8973/SQL-Server-extended-stored-procedure-to-send-UDP-mhttp://lamahashim.blogspot.co.uk/2009/06/using-c-udpclient-send-and-receive.html

如果您采用这种方法,您需要了解可能会阻止通信的任何防火墙问题等,您可能还需要考虑诸如“当c#app未运行时会发生什么”等情况。

答案 5 :(得分:0)

我在c#中使用了timer对象来定期检查新的数据库更新。谢谢大家的答案。