none
Problemas con SqlDependecy RRS feed

  • Pregunta

  • Buenos días.

    Hace un tiempo que vengo intentando utilizar el servicio de notificaciones de SQL Server a través de la clase SqlDependecy pero en fin lo he dejado ya que no es algo de urgencia.

    Hoy en un tiempo libre he decidido seguir con las prueba pero sin buenos resultados hasta el momento.

     

    Lo que he hecho es lo siguiente:

    1. Activar Service Broken para mi Base de Datos
    2. Inciar un sesión de SqlDependecy mediante SqlClient.SqlDependecy.Start(conString)
    3. Declarar una variable de conexion
    4. Declarar una variable command y asignarle la conexion
    5. Declarar una nueva instancia de SqlDependecy y asignarle el command anteriormente instanciado.
    6. Agregar un controlador de eventos para el evento OnChange de SqlDependecy

     

    Código

    Public Class Form1
        Dim conString As String = "Data Source=ATHLON\SQLEXPRESS;Initial Catalog=prueba;Integrated Security=True"
    
        Private Sub process()
            Dim con As New SqlClient.SqlConnection(conString)
            Dim cmd As New SqlClient.SqlCommand("SELECT Id, Descripcion FROM tablaPrueba", con)
            Dim dep As New SqlClient.SqlDependency(cmd)
    
            AddHandler dep.OnChange, AddressOf onChange
    
            con.Open()
            cmd.ExecuteReader()
    
        End Sub
    
        Private Sub onChange(ByVal sender As Object, ByVal e As SqlClient.SqlNotificationEventArgs)
            MsgBox("OK")
        End Sub
    
        Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
            SqlClient.SqlDependency.Stop(conString)
        End Sub
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            SqlClient.SqlDependency.Start(conString)
            process()
        End Sub
    End Class
    

    Las colas se crean en el servidor aparentemente pero al modificar una tabla (INSERT INTO) de la base de datos no se produce notificación alguna y por lo tanto tampoco se ejecuta mi controlador de eventos.

    Ya no sé en donde más mirar, por esta razón pido su ayuda.

    Gracias. Saludos.


    Santiago Ezequiel Rueda
    santiagorueda@live.com.ar
    Blog

    ¡Gadget MSDN Español!

    Entre Ríos
    Argentina
    • Cambiado Enrique M. Montejo domingo, 5 de febrero de 2012 10:57 acceso a datos (De:Lenguaje VB.NET)
    sábado, 4 de febrero de 2012 21:54

Respuestas

Todas las respuestas

  • no deberias iniciar y parar la instancia que creas del SqlDependency

    algo como ser

     

    Public Class Form1
        Dim conString As String = "Data Source=ATHLON\SQLEXPRESS;Initial Catalog=prueba;Integrated Security=True"
        Dim dep As SqlClient.SqlDependency()
       
        Private Sub process()
            Dim con As New SqlClient.SqlConnection(conString)
            Dim cmd As New SqlClient.SqlCommand("SELECT Id, Descripcion FROM tablaPrueba", con)
            dep = New SqlClient.SqlDependency(cmd)

            AddHandler dep.OnChange, AddressOf onChange

            con.Open()
            cmd.ExecuteReader()

        End Sub

        Private Sub onChange(ByVal sender As Object, ByVal e As SqlClient.SqlNotificationEventArgs)
            MsgBox("OK")
        End Sub

        Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
            dep.Stop(conString)
        End Sub

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            process()
            dep.Start(conString)
        End Sub
       
    End Class

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    sábado, 4 de febrero de 2012 22:17
  • Hola de nuevo Leandro.

    Esto que me dices lo había contemplado anteriormente, igualmente el problema sigue siendo el mismo.

    También he probado utilizando Autenticación de SQL Server, con un usuario que posee los permisos requeridos.

    Quedo a la espera, gracias por la ayuda.

     


    Santiago Ezequiel Rueda
    santiagorueda@live.com.ar
    Blog

    ¡Gadget MSDN Español!

    Entre Ríos
    Argentina
    sábado, 4 de febrero de 2012 23:08
  • Realizaste la configuracion de lugar en el servidor sql, verificate esta documentacion

    Segun la documentacion de microsoft Crear una consulta de notificación
    Cuando se ejecuta una instrucción SELECT en una solicitud de notificación, deben establecerse las opciones siguientes para la conexión que envía la solicitud:
    Valores de las opciones de SET
    ANSI_NULLS ON

    ANSI_PADDING ON

    ANSI_WARNINGS ON

    CONCAT_NULL_YIELDS_NULL ON

    QUOTED_IDENTIFIER ON

    NUMERIC_ROUNDABORT OFF

    ARITHABORT ON

    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    My Blog
    domingo, 5 de febrero de 2012 0:18
  • Gracias por la documentación Angel, la estaré leyendo y luego cuento los resultados.
    Santiago Ezequiel Rueda
    santiagorueda@live.com.ar
    Blog

    ¡Gadget MSDN Español!

    Entre Ríos
    Argentina
    domingo, 5 de febrero de 2012 17:25
  • Gracias por la información, parece ser lo que estaba buscando.


    Santiago Ezequiel Rueda
    santiagorueda@live.com.ar
    Blog

    ¡Gadget MSDN Español!

    Entre Ríos
    Argentina
    lunes, 6 de febrero de 2012 18:04