我创建了一个将SMS文本存储到数据库表中的应用程序。因为我无法预测何时会收到短信;我需要找到一种方法来在数据库表中添加新行时收到通知。我正在使用MSSQLServer 2005和一个使用C#的Windows表单应用程序。有人可以建议我这样做吗?谢谢。
答案 0 :(得分:3)
你不能使用触发器,尽管压倒性的声音支持这种错误的方式,至少不要直接通知应用程序。触发器无法连接回应用程序以通知更改,并且“使用套接字”或“使用邮件”等解决方案充其量是天真的,并且在真实条件下它们会在火焰中失败。
你基本上有三种选择:
池进行更改。最容易实现,只需定期查询以查看是否出现了新记录。缺点是1)有时难以检测到变化,这取决于您的数据模型架构和2)在延迟和负载之间难以实现平衡,即。你应该多久轮询一次。
通知表单插入应用程序。那些记录是由应用程序插入的,有插入记录的代码也通知你的应用程序。需要更改通常不受您控制的代码。
第四种方法是使用触发器将消息发送到本地队列,并让应用程序专用于后台的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-m和http://lamahashim.blogspot.co.uk/2009/06/using-c-udpclient-send-and-receive.html
如果您采用这种方法,您需要了解可能会阻止通信的任何防火墙问题等,您可能还需要考虑诸如“当c#app未运行时会发生什么”等情况。
答案 5 :(得分:0)
我在c#中使用了timer对象来定期检查新的数据库更新。谢谢大家的答案。