none
Trazas erróneas en SQLServer Profiler RRS feed

  • Pregunta

  • Hola a todos.

    Trabajo con Linq y SQLServer 2012, asi como VS2015

    Mi aplicación de facturación presenta un comportamiento que a veces, no tengo patrón alguno, en el detalle de la factura deja de grabar a la tabla el ultimo item, o no rebaja la cantidad del inventario, aun lo registre.

    Active, por recomendación de Alberto Población, el SQLProfiler para ver las trazas de las sentencias que llegan al servidor.

    Para mi sorpresa veo que en la ventana de trazas, se muestran muchas lineas de "exec", es decir, fallas de concexion.

    Tambiénse muestran fallas en la mayoría de comandos de insertar y actualizar. Aun asi, los graba, pero a veces no.

    Les pondre el codigo primario del boton Grabar, obviamente esta recortado para no complicar mas.

    Try
                           Dim na As New PDVDatosDataContext()
                If TexSubT.Text > 0 Then
                    If ComboCliente.SelectedValue = 0 And ComboCondicion.Text = "A Crédito" Then
                        Dim msg = "Debe Esoger un Cliente a Crédito de la lista."
                        Dim title = "Advertencia!!"
                        Dim style = MsgBoxStyle.Information
                        Dim response = MsgBox(msg, style, title)
                        'logger.Info("Mensaje por una de estas razones" + " - " + ComboCliente.SelectedValue + " - " + ComboCondicion.Text)
                    Else
    
                        Dim factu As Pedidos = na.Pedidos.FirstOrDefault(Function(a) a.factura = Trim(TexNumero.Text))
                        If factu IsNot Nothing Then
    
                            Dim msg = "Está modificando esta factura/Cotización, esta seguro?"
                            Dim title = "Advertencia!!"
                            Dim style = MsgBoxStyle.YesNo
                            Dim response = MsgBox(msg, style, title)
                            ' Take some action based on the response.
                            If response = MsgBoxResult.Yes Then
                                Dim fe As Date = TexFecha.Text
    
                                factu.factura = Trim(TexNumero.Text)
                                factu.fecha = Convert.ToString((fe).ToShortDateString) + " " + Convert.ToString(Now.ToShortTimeString)
                                factu.codcli = Convert.ToInt32(ComboCliente.SelectedValue)
                                factu.condicion = ComboCondicion.Text
                                factu.monto = Convert.ToString(TexNeto.Text)
                                factu.descuentos = Convert.ToString(TexDesc.Text)
                                factu.impuestos = Convert.ToString(TextImpu.Text)
                                factu.pendiente = Convert.ToString(TextPendiente.Text)
                                factu.pagado = Convert.ToString(TextEfectivo.Text)
                                factu.subtotal = Convert.ToString(TexSubT.Text)
                                factu.cambio = Convert.ToString(TextDevuel.Text)
                               
                                
                                na.SubmitChanges()
                                GrabaItems()
                                ItemFactura.edita = 0
                                
                            End If
                        Else
                            Dim factu1 As New Pedidos()
                            Contador()
                            factu1.factura = Trim(TexNumero.Text)
                            factu1.fecha = Convert.ToString(Today.ToShortDateString) + " " + Convert.ToString(Now.ToShortTimeString)
                            factu1.codcli = Convert.ToInt32(ComboCliente.SelectedValue)
                            factu1.condicion = ComboCondicion.Text
                            factu1.monto = Convert.ToString(TexNeto.Text)
                            factu1.descuentos = Convert.ToString(TexDesc.Text)
                            factu1.impuestos = Convert.ToString(TextImpu.Text)
                            factu1.pendiente = Convert.ToString(TextPendiente.Text)
                            factu1.pagado = Convert.ToString(TextEfectivo.Text)
                            factu1.cambio = Convert.ToString(TextDevuel.Text)
                        
    
                            
                            na.Pedidos.InsertOnSubmit(factu1)
                            na.SubmitChanges()
                            GrabaItems()
    
                            ItemFactura.edita = 0
                     
                        End If
                    End If
    
                Else
                    Dim msg = "Debe tener al menos un producto calculado en el Detalle."
                    Dim title = "Advertencia!!"
                    Dim style = MsgBoxStyle.Information
                    Dim response = MsgBox(msg, style, title)
                End If
            Catch ex As Exception
                'logger.Error("Surgió un error en el modulo Guardar. " + ex.Message)
                MessageBox.Show(ex.Message, "Excepción!", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try

    He aquí las imágenes de la ventana de traza con algunos errores.

    martes, 12 de diciembre de 2017 1:11

Respuestas

  • No se ve ningun error en esas trazas que has mostrado. El "exec" es simplemente una llamada a procedimiento almacenado. Y es perfectamente normal que se produzcan las llamadas al sp_reset_connection: las ejecuta el Pool de conexiones cada vez que tu programa recupera del Pool una conexion que antes devolvio al mismo. Si te molesta que esto ocurra, se puede desactivar el reset mediante un parametro en la cadena de conexion (aunque ahora no me acuerdo de cual es el nombre del parametro). Desactiver el reset aumenta ligeramente el rendimiento del Pool de conexiones, pero si lo haces corres el riesgo de ocasionar errores si una parte del programa hace cambios en el estado de la conexion (por ejemplo, si envia un "use [database]") que no se esperan en otra parte del programa.

    A la hora de depurar por que tu programa a veces no graba bien, en lo que te tienes que fijar es en la sentencia capturada (la que sale en rojo en la parte de abajo de tus dos ultimas capturas). Mira ahi si esta llegando una sentencia que no debe, o no esta llegando una que esperabas que llegase, o los datos que contiene no son los correctos, en los momentos en los que se producen esos fallos que mencionabas.

    martes, 12 de diciembre de 2017 12:28

Todas las respuestas

  • No se ve ningun error en esas trazas que has mostrado. El "exec" es simplemente una llamada a procedimiento almacenado. Y es perfectamente normal que se produzcan las llamadas al sp_reset_connection: las ejecuta el Pool de conexiones cada vez que tu programa recupera del Pool una conexion que antes devolvio al mismo. Si te molesta que esto ocurra, se puede desactivar el reset mediante un parametro en la cadena de conexion (aunque ahora no me acuerdo de cual es el nombre del parametro). Desactiver el reset aumenta ligeramente el rendimiento del Pool de conexiones, pero si lo haces corres el riesgo de ocasionar errores si una parte del programa hace cambios en el estado de la conexion (por ejemplo, si envia un "use [database]") que no se esperan en otra parte del programa.

    A la hora de depurar por que tu programa a veces no graba bien, en lo que te tienes que fijar es en la sentencia capturada (la que sale en rojo en la parte de abajo de tus dos ultimas capturas). Mira ahi si esta llegando una sentencia que no debe, o no esta llegando una que esperabas que llegase, o los datos que contiene no son los correctos, en los momentos en los que se producen esos fallos que mencionabas.

    martes, 12 de diciembre de 2017 12:28
  • Gracias otra vez hermano.

    Seguire verificando el codigo.

    miércoles, 13 de diciembre de 2017 2:31