2015-05-06 16 views
1

我有一个连接到我的网站(ASP.NET MVC)的数据库A。每当有数据库A通过网站的改变/更新,我想运行一个控制台应用程序从数据库A抓取更新的数据,并把它降低到数据库B是否可以在数据库更改/更新上运行控制台应用程序?

使用SqlDependencyService Broker可以实现此功能吗?或者有更好的方法来实现这个功能吗?

+0

你可以有一个简单的Windows服务,会定期运行该控制台应用程序和控制台应用程序必须同步与数据库B. – Kurubaran

+5

数据库中的变化的逻辑是'数据库B'应该是'数据库直接拷贝'?为什么不一起使用复制和nix控制台应用程序? – Tom

+0

@Tom no。数据库A和B是独立的数据库。数据库B只需要数据库A中的少量数据。 – jkl

回答

2

有办法你如何能做到这个数字。仅举几例:

  • 设置数据库镜像

  • 备份/恢复整个数据库(可以很容易矫枉过正)

  • 使用自定义脚本来更新一个数据库到另一

  • 使用同步框架从ado.net

  • 使用一些自定义代码更新第二分贝

尽管您可以将前三个设置为完全在数据库级别,但4,5(以及3也可以)使用某些应用程序。

为了调用你的代码的时候,你可以同时使用推和拉的办法,所以无论是设置一个计时器或使用的SqlDependency有回调时更新发生。

在数据库级别,你可以设置触发或有重复任务设置。

+0

所以我可以使用'SqlDependency'来运行窗口应用程序? – jkl

+0

选项5似乎是我需要的选项。 – jkl

+0

您可以使用SqlDependency设置.net应用程序,并在'OnDependencyChange'上执行代码。 – vittore

0

,我不能说好,但我觉得你可以去触发并调用在SQL服务器https://msdn.microsoft.com/en-us/library/w2kae45k.aspx一个CLR函数。

+4

尽管这个链接可能回答这个问题,但最好在这里包含答案的基本部分,并提供参考链接。如果链接页面更改,则仅链接答案可能会失效。 – Tom

+1

是的我同意,但我在手机上我会稍后编辑答案,谢谢你的提示 – Giuseppe

+0

谢谢你的链接! – jkl

2

您可以实现SQL SERVER CLR集成在以下几个方面:

  1. 能够与SQL服务器CLR:https://msdn.microsoft.com/en-us/library/ms131048(SQL.100).aspx

  2. 写CLR触发:https://msdn.microsoft.com/en-us/library/ms131093(v=sql.100).aspx

  3. 欲了解更多信息:https://msdn.microsoft.com/en-us/library/ms254498%28v=vs.110%29.aspx

UPDATE:

您可以创建像波纹管一个SP和在该表中的触发器调用此SP:CREDIT

CREATE PROCEDURE dbo.usp_ExecCmdShellProcess 
AS 
    BEGIN 
     DECLARE @job NVARCHAR(100) ; 
     SET @job = 'xp_cmdshell replacement - ' + CONVERT(NVARCHAR, GETDATE(), 121) ; 

     EXEC msdb..sp_add_job @job_name = @job, 
      @description = 'Automated job to execute command shell script', 
      @owner_login_name = 'sa', @delete_level = 1 ; 

     EXEC msdb..sp_add_jobstep @job_name = @job, @step_id = 1, 
      @step_name = 'Command Shell Execution', @subsystem = 'CMDEXEC', 
      @command = 'c:\Testconsole.exe', @on_success_action = 1 ; 

     EXEC msdb..sp_add_jobserver @job_name = @job ; 

     EXEC msdb..sp_start_job @job_name = @job ; 

    END ; 
GO 
+0

有趣。我会阅读文章。谢谢。 – jkl

+0

请检查我的更新,并请upvote或接受为答案,如果这是有益的,谢谢:) – Raishul

相关问题