在应用程序中监听插入数据库表

时间:2015-02-11 08:52:10

标签: c# sql .net events triggers

我有一个SQL Server 2005数据库,它在一个表中注册某些设备的事件。我需要在我的C#应用​​程序中捕获这些事件。

事件可以随时发生。我正在寻找一个关于如何管理数据库侦听/捕获数据库发送的东西的良好实践。 stackoverflow上有一些关于这些问题的主题,但是没有一种方法可以推荐用于这些情况,但只有一些方法没有系统的建议如何完成。

所以我问一下好的做法。应该如何完成这些工作?请帮忙。

在我看来,可以从表格向c#应用程序发送一些信息的触发器似乎是最好的解决方案,只是我不知道是否可以安排触发器来完成这些工作。

我会感激任何消化;)

1 个答案:

答案 0 :(得分:0)

我知道通过SQL表上的更改在C#中通知的唯一方法是使用SqlDependencies

示例:

private async Task RegisterSqlDependency()
    {
        if (_dependency != null)
            _dependency.OnChange -= this.OnChange;
        String query = "select MyCol from dbo.MyTable WHERE myKey = '" + _dependecyKey + "'";

        using (SqlConnection connexion = new SqlConnection("ConnexionString"))
        {
            using (SqlCommand command = new SqlCommand(query, connexion))
            {
                _dependency = new SqlDependency(command, null, 0);
                _dependency.OnChange += this.OnChange;
                await connexion.OpenAsync();
                using (SqlDataReader reader = await command.ExecuteReaderAsync())
                {
                    while (reader.Read())
                    {
                       .... GetData ....
                    }
                }
            }
        }
    }

private void OnChange(object sender, SqlNotificationEventArgs e)
    {
      .... Data has changed on table ....
      call RegisterSqlDependency() again
    }

您必须在数据库上启用SERVICE BROKER以启用SqlDepedency:

ALTER DATABASE MyDatabase SET ENABLE_BROKER with rollback immediate;