Principales respuestas
Trazas erróneas en SQLServer Profiler

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én
se 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.
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.
- Propuesto como respuesta Juan MondragónModerator martes, 12 de diciembre de 2017 16:59
- Marcado como respuesta Pablo Rubio lunes, 18 de diciembre de 2017 15:23
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.
- Propuesto como respuesta Juan MondragónModerator martes, 12 de diciembre de 2017 16:59
- Marcado como respuesta Pablo Rubio lunes, 18 de diciembre de 2017 15:23
-