sqltabledependency schemas query postquerynotification notification net microsoft habilitar example enable dependency codeproject c# sql-server-2008-r2 notifications sqldependency

c# - schemas - sqldependency enable service broker



cómo mantener la dependencia sql haciendo su propósito (2)

El problema es en ausencia de resubscruption. Debería llamar al método de listen dentro de OnDependencyChange . Sé que es extraño, pero es la clase SqlDependency.

Tengo una aplicación de consola.

Quiero seguir viendo los cambios en una columna específica en la tabla de mi base de datos.

Leí en Internet y descubrí que la dependencia de sql es buena para mi propósito. Empecé a aprender sobre esto e hice lo siguiente:

  1. crear una clase.
  2. En el constructor, llamé a la función estática start y llamé a una función que tiene todas las configuraciones de dependencia sql.

Mi problema

Cuando ejecuto la aplicación usando el start hago clic en Visual Studio 2013, las aplicaciones funcionan y luego se detienen. Sin embargo , lo que necesito es que las aplicaciones comiencen a funcionar y sigan vigilando los cambios en la tabla de mi base de datos.

¿Usted me podría ayudar por favor?

Código:

Este es un código c # muy simple.

public class MyListener { public MyListener() { SqlDependency.Start(getConnectionString()); this.listen(); } private string getConnectionString() { return ConfigurationManager.ConnectionStrings["popup"].ConnectionString.ToString(); } private void listen() { string query = "SELECT CallerID FROM TransferToSIP WHERE hasBeenRead = 0"; SqlConnection con = new SqlConnection(getConnectionString()); SqlCommand cmd = new SqlCommand(query, con); con.Open(); using (cmd) { SqlDependency dependency = new SqlDependency(cmd); dependency.OnChange += new OnChangeEventHandler(OnDependencyChange); using (SqlDataReader reader = cmd.ExecuteReader()) { } } } void OnDependencyChange(object sender, SqlNotificationEventArgs e) { Console.WriteLine("Roma"); } void Termination() { SqlDependency.Stop(getConnectionString()); Console.Read(); }


Tenga cuidado al usar la clase SqlDependency para monitorear los cambios en las tablas de la base de datos: tiene problemas con las pérdidas de memoria. Sin embargo, puede usar su propia realización con desencadenadores DDL y SQL Service Broker API o utilizar uno de los proyectos de código abierto, por ejemplo, SqlDependencyEx :

int changesReceived = 0; using (SqlDependencyEx sqlDependency = new SqlDependencyEx( TEST_CONNECTION_STRING, TEST_DATABASE_NAME, TEST_TABLE_NAME)) { sqlDependency.TableChanged += (o, e) => changesReceived++; sqlDependency.Start(); // Make table changes. MakeTableInsertDeleteChanges(changesCount); // Wait a little bit to receive all changes. Thread.Sleep(1000); } Assert.AreEqual(changesCount, changesReceived);

Espero que esto ayude.