none
trigger en sql y me envie una alerta en c# winform RRS feed

  • Pregunta

  • saludos,

    tengo una tabla, con dos campos, descripcion, cantidad, lo que quiero es hacer un trigger en sql para cuando la cantidad llegue a 2 me envie una alerta o un mensaje al momento de darle al boton registrar en c# winform, como seria?


    joel

    jueves, 7 de enero de 2021 0:48

Respuestas

  • Hacerlo con un trigger es muy complicado. Tendrías que llamar a un Assembly cargado en el servidor, y que este ensamblado llame a tu aplicación mediante algún mecanismo de comunicación inter-procesos tal como WCF. Pero las DLLs de WCF no vienen cargadas en SQL Server, por lo que tendrías que añadirlas. Si buscas por Internet encontrarás artículos escritos por gente que lo ha hecho y explican cómo, pero verás que no es una cosa sencilla. Y después tendrías que implementar en tu Winform el "escuchador" de WCF, y como escucha en otro hilo usar el "Invoke" para pasar le ejecución al hilo principal y que pueda presentar el mensaje. Y, por supuesto, configurar la red y los firewalls para que se permita la comunicación desde el SQL Server a tu aplicación de escritorio.

    En resumidas cuentas, un auténtico follón. Yo te recomendaría que en lugar de usar un Trigger utilices un simple SqlDependency en tu programa, o que uses un Timer para hacer un polling sobre la tabla que quieres monitorizar. O mejor todavía, si esa tabla solo se modifica desde tu propio programa, que sea ese programa el que genere el mensaje cuando modifique la cantidad.

    jueves, 7 de enero de 2021 8:38
    Moderador

Todas las respuestas

  • Hacerlo con un trigger es muy complicado. Tendrías que llamar a un Assembly cargado en el servidor, y que este ensamblado llame a tu aplicación mediante algún mecanismo de comunicación inter-procesos tal como WCF. Pero las DLLs de WCF no vienen cargadas en SQL Server, por lo que tendrías que añadirlas. Si buscas por Internet encontrarás artículos escritos por gente que lo ha hecho y explican cómo, pero verás que no es una cosa sencilla. Y después tendrías que implementar en tu Winform el "escuchador" de WCF, y como escucha en otro hilo usar el "Invoke" para pasar le ejecución al hilo principal y que pueda presentar el mensaje. Y, por supuesto, configurar la red y los firewalls para que se permita la comunicación desde el SQL Server a tu aplicación de escritorio.

    En resumidas cuentas, un auténtico follón. Yo te recomendaría que en lugar de usar un Trigger utilices un simple SqlDependency en tu programa, o que uses un Timer para hacer un polling sobre la tabla que quieres monitorizar. O mejor todavía, si esa tabla solo se modifica desde tu propio programa, que sea ese programa el que genere el mensaje cuando modifique la cantidad.

    jueves, 7 de enero de 2021 8:38
    Moderador
  • Hola,

    ¿Alguna novedad sobre la consulta realizada?

    Gracias por usar los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    jueves, 7 de enero de 2021 15:06
    Moderador
  • Hola joel201022:

    Puede que sea mucho más fácil. Al momento de registrar tu operación y en la misma instrucción además de hacer una insert, recuperas mediante una select la cantidad existente, y desde el propio winform ya sabes la cantidad que hay.

    Algo de este estilo.

    string query = "Insert into dbo.tuTabla (descripcion, cantidad) values (@param1, @param2);

    Select count(*) from dbo.tuTabla where descripcion = @param1);"

    Y recuperas el valor que necesitas en la misma inserción.

    viernes, 8 de enero de 2021 6:14
  • Hola joel201022:

    Puede que sea mucho más fácil. Al momento de registrar tu operación y en la misma instrucción además de hacer una insert, recuperas mediante una select la cantidad existente, y desde el propio winform ya sabes la cantidad que hay.

    Algo de este estilo.

    string query = "Insert into dbo.tuTabla (descripcion, cantidad) values (@param1, @param2);

    Select count(*) from dbo.tuTabla where descripcion = @param1);"

    Y recuperas el valor que necesitas en la misma inserción.

    saludos, si pero lo que quiero es, que cuando la cantidad me llegue a 2 me despliegue un mensaje diciendo que quedan 2

    joel

    sábado, 9 de enero de 2021 0:39
  • Hacerlo con un trigger es muy complicado. Tendrías que llamar a un Assembly cargado en el servidor, y que este ensamblado llame a tu aplicación mediante algún mecanismo de comunicación inter-procesos tal como WCF. Pero las DLLs de WCF no vienen cargadas en SQL Server, por lo que tendrías que añadirlas. Si buscas por Internet encontrarás artículos escritos por gente que lo ha hecho y explican cómo, pero verás que no es una cosa sencilla. Y después tendrías que implementar en tu Winform el "escuchador" de WCF, y como escucha en otro hilo usar el "Invoke" para pasar le ejecución al hilo principal y que pueda presentar el mensaje. Y, por supuesto, configurar la red y los firewalls para que se permita la comunicación desde el SQL Server a tu aplicación de escritorio.

    En resumidas cuentas, un auténtico follón. Yo te recomendaría que en lugar de usar un Trigger utilices un simple SqlDependency en tu programa, o que uses un Timer para hacer un polling sobre la tabla que quieres monitorizar. O mejor todavía, si esa tabla solo se modifica desde tu propio programa, que sea ese programa el que genere el mensaje cuando modifique la cantidad.

    saludos, no seria cuando modifique la cantidad, porque lo aria cada ves que se haga un cambio, lo que si quiero es que cuando la cantidad llegue a 2 me despliegue el mensaje diciendome que llego a 2, me parece que con un if else puedo lograrlo antes haciendole la consulta mediante query a sql desde el programa

    joel

    sábado, 9 de enero de 2021 0:41