我有一个SQL Server 2005数据库,它在一个表中注册某些设备的事件。我需要在我的C#应用程序中捕获这些事件。
事件可以随时发生。我正在寻找一个关于如何管理数据库侦听/捕获数据库发送的东西的良好实践。 stackoverflow上有一些关于这些问题的主题,但是没有一种方法可以推荐用于这些情况,但只有一些方法没有系统的建议如何完成。
所以我问一下好的做法。应该如何完成这些工作?请帮忙。
在我看来,可以从表格向c#应用程序发送一些信息的触发器似乎是最好的解决方案,只是我不知道是否可以安排触发器来完成这些工作。
我会感激任何消化;)
答案 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;