大佬教程收集整理的这篇文章主要介绍了sql-server – 如何将数据从数据库推送到应用程序?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我谷歌它我得到了一些答案,他们是查询通知here,sql服务器代理作业自动安排任务.如果您有任何其他建议,请发布.
>实现不安全的CLR触发器
>实施不安全的CLR程序
>使用Xp_cmdsHell
>致电网络服务
>使用查询通知
你可以在这个讨论中阅读一些关于它们的内容:
serial numbers,created and modified in SQL Server.
我个人更喜欢查询通知而不是其他方法,因为它已经支持各种情况(例如同步/异步通信),你不必重新发明轮子.在您的情况下由Microsoft推荐.
轮询是你提到的另一种方法.这是一个更像传统的方法,可能会有一些性能惩罚相关,但如果你足够小心,你不应该担心它们.例如,如果您已在应用程序中构建了身份验证,则可以在Users表中创建另一列,如果有与该用户相关的任何更改,则会设置该列.然后,你的应用程序中可能只有一个线程会每秒对该表执行一次查询(即使是NOLOCK的脏读也不应该是一个问题)并维护一些内存结构(例如线程安全字典)说哪个客户端应该被推送.另一个线程轮询你的字典,当它找到客户端的东西时,执行一个db查询,提取数据并将其发送到客户端.这看起来像很多不必要的工作,但最后你得到两个独立的工作人员,这有点帮助分离关注点;第一个只是一个执行“轻量级”数据库轮询的线人;第二个提取真实数据并执行服务器推送.您甚至可以优化推送工作程序,它在运行时会检查多个客户端是否需要某些数据,然后为所有需要它的人执行选择.你可能希望第二个工人的运行频率低于第一个工人.
编辑
如果您希望使用非.NET技术来实现相同的功能,则必须进一步了解sql Server service broker.查询通知是在sql Server service broker之上用.NET构建的简化层,您必须自己构建该层的至少一部分.这包括在另一侧使用SEND和RECEIVE创建队列,消息类型,服务和存储过程.您必须自己处理对话/对话. SB实际上是一个调整为在RDBMS环境中工作的异步消息传递世界,因此您将看到一些新的Tsql表达式.但是,MSDN可以帮助:
> http://msdn.microsoft.com/en-us/library/ms166061(v=sql.105).aspx
> http://msdn.microsoft.com/en-us/library/bb522893.aspx
这也有帮助:Externally activate non-.NET application from service Broker
关于如何编码东西的示例:
-- First you have to enable SB for your database USE master ALTER DATABASE Playground SET ENABLE_broKER GO USE Playground GO -- Then create a message type; usually it will be XML -- because it's very easy to serialize/deserialize it CREATE messaGE TYPE [//Playground/YourmessageType] VALIDATION = WELL_FORMED_XML GO -- Then create a contract to have a rule for communication -- Specifies who sends which message type CREATE CONTRACT [//Playground/YourContract] ( [//Playground/YourmessageType] SENT BY ANY) GO --Creates queues,one for initiator (1) and one for target (2) CREATE QUEUE MyQueue1 GO CREATE QUEUE MyQueue2 GO -- Finally,configure services that 'consume' queues CREATE serviCE [//Playground/Yourservice1] ON QUEUE MyQueue1 ([//Playground/YourContract]) GO CREATE serviCE [//Playground/Yourservice2] ON QUEUE MyQueue2 ([//Playground/YourContract]) GO -- Now you can send a message from service to service using contract DECLARE @dHandle uniquEIDentifier,@msg nvarchar(maX) BEGIN DIALOG @dHandle FROM serviCE [//Playground/Yourservice1] TO serviCE '//Playground/Yourservice2' ON CONTRACT [//Playground/YourContract] WITH ENCRYPTION = OFF SELECT @msg = ( SELECT TOP 3 * FROM Table1 FOR XML PATH('row'),ROOT('Table1')) ;SEND ON CONVERSATION @dHandle messaGE TYPE [//Playground/YourmessageType] (@msg) PRINT @msg GO -- To get the message on the other end,use RECEIVE -- Execute this in another query window DECLARE @dHandle uniquEIDentifier DECLARE @msgType nvarchar(128) DECLARE @msg nvarchar(maX) ;RECEIVE TOP(1) @dHandle = conversation_handle,@msg = message_body,@msgType = message_type_name FROM MyQueue2 SELECT @msgType SELECT @msg END CONVERSATION @dHandle GO
以上是大佬教程为你收集整理的sql-server – 如何将数据从数据库推送到应用程序?全部内容,希望文章能够帮你解决sql-server – 如何将数据从数据库推送到应用程序?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。