【问题标题】:Invoke a C# method from inside a SQL trigger从 SQL 触发器内部调用 C# 方法
【发布时间】:2011-08-16 13:59:58
【问题描述】:

我正在使用 C# 和 Visual Studio 2010 以及 SQL Server Management Studio 2008 R2 使用 Winforms 应用程序。

我的应用程序检查数据库中以前的值,如果当前插入的值在某个范围内,我需要执行一个用 C# 编写的方法,即宿主语言。该方法实际上是向存储在数据库中的电子邮件地址发送电子邮件。

现在使用触发器可以轻松完成检查部分,但后者对我来说很麻烦。

谁能帮帮我?

【问题讨论】:

    标签: c# sql visual-studio-2010 sql-server-2008


    【解决方案1】:

    有几种方法可以处理这个问题。

    1. 您可以将条目记录到 C# 服务监视的数据库中,当添加条目时,它会发送电子邮件。这可能是某种 Windows 服务,它每 1 分钟在计时器上运行一次,检查更新。
    2. 您可以使用SQL-CLR 将C# 代码与SQL 代码集成。这需要打开几个安全点并将二进制文件从您的项目嵌入到 SQL Server。出于安全原因,这是一种不太受欢迎的方法,但它可以完成这项工作。

    【讨论】:

    • 如果我的 Win-Forms 应用程序关闭,方法 1. 是否有效?假设将 n 条记录添加到数据库中,但是当它们试图通过电子邮件发送时,用户关闭了应用程序。如果它确实有效,我们该怎么做?
    • 我认为 mellamokb 提出的 (1) 是第二个程序(从数据库服务器上的 windows 操作系统启动的 windows 服务),它监视表中的新条目,然后执行工作。这是一种常见的模式,我知道有几个地方使用它。无需运行主应用程序。
    【解决方案2】:

    您可能想查看Database Mail。这在 SQL Server 中集成了电子邮件发送功能。

    否则,我强烈建议不要尝试直接在触发器中执行此操作 - 发送电子邮件可能是一个耗时的过程,如果电子邮件功能不是,您不希望延迟交易的完成目前正在工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 1970-01-01
      相关资源
      最近更新 更多