sqltabledependency schemas postquerynotification microsoft framework dependency codeproject c# sql notifications sqldependency

c# - schemas - sqldependency entity framework



Notificaciones de SQL Server-My OnChange no se activa (2)

Mientras trabajaba en la implementación de la notificación de consultas, obtuve el problema exacto. Revisé todas las configuraciones, piezas de código e incluso las configuraciones de TCP, pero nada me ayudó. Luego, descubrí la siguiente consulta para ejecutar en la base de datos y resolvió mi problema. Quizás puedas intentarlo.

ALTER AUTHORIZATION ON DATABASE::[Your DB] TO sa;

Me gustaría utilizar las notificaciones de SQL Server para capturar insertos en mi base de datos dentro de una aplicación de winforms. Estoy intentando usar el objeto SQLDependency. Los artículos de MSDN hacen que esto parezca bastante directo. Así que he creado una pequeña aplicación de ejemplo para intentarlo. El evento solo parece activarse cuando ingreso a mi aplicación por primera vez (aparece MessageBox). Insertar datos en la tabla no genera el evento OnChange que parecería. ¿Puede alguien decirme lo que me estoy perdiendo? ¡Gracias!

public Main() { InitializeComponent(); var check = EnoughPermission(); SqlDependency.Stop(constr); SqlDependency.Start(constr); if(connection == null) { connection = new SqlConnection(constr); } if(command == null) { command = new SqlCommand("Select ID, ChatMessage FROM dbo.Chat",connection); } connection.Open(); command.Notification = null; SqlDependency dependency = new SqlDependency(command); dependency.OnChange += new OnChangeEventHandler(dependency_OnChange); command.ExecuteReader(); } private void dependency_OnChange(object sender, SqlNotificationEventArgs e) { MessageBox.Show("Change!"); }


Su primera notificación es la única notificación que recibirá. Las notificaciones de consulta no son una suscripción para cambios, una vez que se activa una notificación, también se invalida. Se supone que debes volver a enviar una nueva suscripción de notificación.

Si su consulta es notificada inmediatamente, significa que no recibió una notificación de cambio, sino una para una consulta no válida. Compruebe los valores del argumento SqlNotificationEventArgs que recibe. Verifique que la información sea ​​Insert / Update / Delete, verifique que Source for Data, marque el tipo para ser Change.

Eche un vistazo al ejemplo de la aplicación Watcher para comprender mejor cómo se supone que debe volver a suscribirse cuando se le notifique. Para una mejor comprensión de cómo funcionan las notificaciones de consulta, vea La notificación misteriosa .