在接下来的几个小时里我的头撞墙后,我慢慢开始意识到我的问题所在,所以让我回顾一下:当一行被插入时,我正试图改变一个网站的字符串一个数据库,但由于某种原因,我发出的触发器告诉我何时对数据库进行了更改,当插入,udpate或其他任何事情发生时根本不会触发。该表的Service Broker已启用。
这是涉及的代码:
namespace WebApplication.SignalR_Data
{
public class NotificationRepository
{
public NotificationInfo GetData()
{
using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ReservationDbContext"].ConnectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand(@"SELECT COUNT(*) FROM dbo.Reservations", connection))
{
command.Notification = null;
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
if (connection.State == System.Data.ConnectionState.Closed)
connection.Open();
return new NotificationInfo { RowCount = (int)command.ExecuteScalar(), Date = DateTime.Now };
}
}
}
// This is the method that handles the trigger.
public void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
if (e.Type == SqlNotificationType.Change)
{
NotificationHub.Show();
}
}
}
}
我认为由于我犯了错误而无法正常工作,但遗憾的是我还没有发现它们。
通过NotificationHub.Show();使用更新的行数和日期向网站的所有客户端广播消息,但该消息永远不会发送,因为触发器不会触发。有什么想法吗?
提前谢谢!
答案 0 :(得分:0)
您需要再次注册方法GetData()以继续接收事件。 像这样:
public void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
if (e.Type == SqlNotificationType.Change)
{
NotificationHub.Show();
}
GetData();
}