是否可以在数据库更改/更新上运行控制台应用程序?

时间:2015-05-06 19:01:39

标签: c# asp.net sql-server

我有一个数据库A,它连接到我的网站(ASP.NET MVC)。每当通过网站在数据库A中进行更改/更新时,我想运行一个控制台应用程序以从数据库A获取更新的数据并将其下拉到数据库B

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

3 个答案:

答案 0 :(得分:2)

您可以通过以下方式实现SQL SERVER CLR集成:

  1. 使用SQL Server启用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

  4. <强>更新

    您可以创建一个类似于下面的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 
    

答案 1 :(得分:2)

有多种方法可以做到这一点。仅举几例:

  • 设置数据库镜像

  • 备份/恢复整个数据库(很容易过度杀伤)

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

  • 使用ado.net的同步框架

  • 使用一些自定义代码更新第二个数据库

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

为了按时调用代码,您可以使用推送和拉取方法,因此要么设置定时器,要么在更新发生时使用SqlDependency进行回调。

在数据库级别,您可以设置触发器或重复设置作业。

答案 2 :(得分:-1)

我不能说更好,但我认为你可以在SQL服务器https://msdn.microsoft.com/en-us/library/w2kae45k.aspx中找到触发器并调用clr函数。