C# 是否可以在数据库更改/更新时运行console应用程序?

C# 是否可以在数据库更改/更新时运行console应用程序?,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我有一个数据库a,它连接到我的网站(ASP.NET MVC)。每当通过网站对数据库a进行更改/更新时,我想运行一个控制台应用程序,从数据库a获取更新的数据,并将其下拉到数据库B 使用SqlDependency或servicebroker可以实现此功能吗?或者有更好的方法实现此功能吗?我不能说更好,但我认为您可以在SQL server a中使用触发器并调用clr函数。您可以通过以下方式实现SQL server clr集成: 使用SQL server启用CLR: 写入CLR触发器: 有关更多信息:

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


使用
SqlDependency
servicebroker
可以实现此功能吗?或者有更好的方法实现此功能吗?

我不能说更好,但我认为您可以在SQL server a中使用触发器并调用clr函数。

您可以通过以下方式实现SQL server clr集成:

  • 使用SQL server启用CLR:

  • 写入CLR触发器:

  • 有关更多信息:

  • 更新:

    您可以创建一个类似于bellow的sp,并在该表的触发器中调用此sp::


    有很多方法可以做到这一点。举几个例子:

    • 设置数据库镜像

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

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

    • 使用ado.net中的同步框架

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

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

    为了按时调用您的代码,您可以使用push和pull两种方法,所以可以设置一个计时器,或者在更新发生时使用SqlDependency进行回调


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

    您可以使用一个简单的windows服务定期运行此控制台应用程序,控制台应用程序将具有将数据库a更改与数据库B同步的逻辑。
    数据库B
    是否应该是
    数据库a
    的直接副本?为什么不一起使用复制和禁用控制台应用程序?@Tom no.数据库A和B是独立的数据库。数据库B只需要数据库A中的少量数据。SQL Server中内置了各种各样的功能,可以帮助您实现这一点。你可能想调查,或者,甚至可能。尽管我推荐前两个,如果它们适合您的需要。@Zane,从您发布的关于镜像的链接中,此功能将在Microsoft SQL Server的未来版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会无效。是的,我同意,但我在手机上,稍后我将编辑答案,感谢您提供的提示,我可以使用
    SqlDependency
    运行窗口应用程序?选项5似乎是我需要的选项。您可以设置带有SqlDependency的.net应用程序,并在
    OnDependencyChange
    上执行代码。请检查我的更新,如果这有帮助,请进行投票或接受回答,谢谢:)
    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