visual tag por otro habilitar formulario deshabilitar desde crear como codigo botones c# database ado.net odp.net

tag - habilitar y deshabilitar botones en c#



Algunos cambios de datos en la base de datos. ¿Cómo puedo activar algún código C#haciendo algún trabajo sobre estos cambios? (6)

  1. ¿De verdad te importa la independencia de la base de datos?
  2. ¿Sería realmente tan difícil crear un mecanismo de diferencia para cada tipo de base de datos que todos tengan la misma interfaz pública?

Estoy al tanto de OracleDependency en ODP.NET, pero ¿y las otras bases de datos?

SQL Server tiene algo así, pero nunca lo he usado.

Supongamos que tengo alguna aplicación A con una base de datos. Ahora quiero agregar otra aplicación B, que debe hacer un seguimiento de los cambios en la base de datos de la aplicación A. La aplicación B debería hacer algunos cálculos, cuando los datos han cambiado. No hay comunicación directa entre ambas aplicaciones. Ambos solo pueden ver la base de datos.

El problema básico es: algunos cambios de datos en la base de datos. ¿Cómo puedo activar algún código C # haciendo algún trabajo sobre estos cambios?

Para dar un estímulo a las respuestas, menciono algunos enfoques, que actualmente estoy considerando:

  1. Realice la encuesta de la aplicación B para conocer los cambios en las tablas de interés. Ventaja: enfoque simple. Desventaja: mucho tráfico, especialmente cuando hay muchas mesas involucradas.
  2. Presente desencadenantes, que dispararán en ciertos eventos. Cuando disparan, deben escribir una entrada en una "tabla de eventos". La aplicación B solo necesita sondear esa "tabla de eventos". Ventaja: menos tráfico. Desventaja: la lógica se coloca en la base de datos en forma de desencadenantes. (No se trata de la "maldad" de los factores desencadenantes. Es una cuestión de diseño, lo que la convierte en una desventaja).
  3. Deshágase del enfoque de votación y use la clase SqlDependency para recibir notificaciones de cambios. Ventaja: (¿Tal vez?) Menos tráfico que el método de votación. Desventaja: no es una base de datos independiente. (Estoy al tanto de OracleDependency en ODP.NET, pero ¿y las otras bases de datos?)

¿Qué enfoque es más favorable? Tal vez me he perdido alguna gran (des) ventaja en los enfoques mencionados? Tal vez hay algunos otros enfoques en los que no he pensado?

Edit 1: La independencia de la base de datos es un factor para ... llamémosles ... "vendedores". Puedo usar SqlDependency o OracleDependency. Para DB2 u otras bases de datos, puedo recurrir al método de votación. Es solo una cuestión de costo y beneficio, por lo que al menos quiero pensar para poder discutirlo.


Creo que ha cubierto los enfoques en los que he pensado, no existe una "mejor" forma absoluta de hacerlo, lo que importa son sus requisitos y prioridades.

Personalmente, me gusta la elegancia de la clase SqlDependency; y ¿qué importancia tiene la independencia de la base de datos en el mundo real para la mayoría de las aplicaciones de todos modos? Pero si es una prioridad para usted tener independencia de la base de datos, entonces no puede usar eso.

El sondeo es mi segundo favorito porque mantiene la base de datos limpia de desencadenantes y lógica de aplicación; en realidad, no es una mala opción porque, como dices, es simple. Si la aplicación B puede esperar unos minutos a la vez antes de "notar" cambios en la base de datos, sería una buena opción.

Entonces mi respuesta es: depende. :)

¡Buena suerte!


Me gustaría ir con la solución n. ° 1 (sondeo), porque evitar las dependencias y las conexiones directas entre aplicaciones separadas puede ayudar a reducir la complejidad y los problemas.


Puede hacer una clase MySqlDependency e implementar SqlDependency o SqlDependencyForOracle (pooling)


Yo iría con el # 1. En realidad, no es tanto tráfico como podrías pensar. Si sus datos no cambian con frecuencia, puede ser pesimista y solo obtener algo que le diga o no o no sobre los cambios en la tabla.

Si diseña su esquema teniendo en cuenta las encuestas, es probable que no tenga tanto éxito por encuesta.

  • Si solo está agregando registros, no los está modificando, entonces la verificación de la identificación más alta puede ser suficiente en una tabla en particular.

  • Si los está actualizando a todos, puede almacenar una columna de marca de tiempo e indexarla, luego buscar la marca de tiempo máxima.

  • Y puede enviar una consulta ubber que encuestas múltiples talbes (de manera eficiente) y devuelve la lista de tablas modificadas.

Nada en esta respuesta es particularmente inteligente, solo estoy tratando de mostrar que el # 1 puede no ser tan malo como parece a primera vista.


Puede usar un desencadenador SQL dentro de un SQL CLR Database Project y ejecutar su código en ese proyecto; consulte: https://msdn.microsoft.com/en-us/library/938d9dz2.aspx

O bien, al activarse dentro del SQL CLR Database Project , puede realizar una solicitud desde el SQL CLR Database Project al proyecto que realmente desea que actúe en el desencadenador.