1

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

4

6 回答 6

3

尽管有压倒性的声音支持这种错误的方式,但您不能使用触发器,至少不要直接通知应用程序。触发器根本无法连接回应用程序以通知更改,并且像“使用套接字”或“使用邮件”这样的解决方案充其量是幼稚的,并且在现实世界条件下它们会失败。

您基本上有三种选择:

  • 更改池。最容易实现,只需定期查询以查看是否出现新记录。缺点是 1) 有时很难检测到更改,具体取决于您的数据模型模式和 2) 延迟和负载之间难以实现平衡,即。你应该多久投票一次。

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

  • 使用查询通知

第四种选择是使用触发器将消息发送到本地队列并让应用程序WAITFOR(RECEIVE...)在后台专门等待(这与轮询不同),但通过利用 Query Notifications 和SqlDependency.

于 2012-09-11T13:26:26.950 回答
2

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

于 2012-09-11T12:50:07.817 回答
0

是的,使用 INSERT 触发器。

这是一篇 Stackoverflow 文章:SQL Server 2008 - 帮助编写简单的 INSERT 触发器

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

于 2012-09-11T12:50:29.553 回答
0

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

于 2012-09-11T13:00:34.553 回答
0

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

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

我只是用谷歌搜索了一下,一些相关链接似乎是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# 应用程序未运行时会发生什么”等问题。

于 2012-09-11T13:07:51.770 回答
0

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

于 2013-05-18T07:06:07.530 回答