Principales respuestas
Conexion cerrada

Pregunta
-
Saludos, quisiera pedir de favor me ayuden con un problemita, tengo una base de datos sql server y una app desarrollada en vb.net que se pega remotamente a la BD, hay un modulo que realiza una consulta por medio de un while, el problema se da cuando esa consulta devuelve muchos datos, a media consulta la conexión se cierra y el programa se detiene, creo que tiene que ver con alguna configuración de sql server, pero no se cual, si alguien me puede ayudar con eso le estaría muy agradecido, de antemano gracias.
Respuestas
-
Gracias a todos por sus comentarios, el problemas era cuestión de optimizar la consulta, ya que aunque cambiara el timeout siempre pasaba los mismo. Era error de estructura de las instrucciones.
- Propuesto como respuesta Brayan De La Cruz jueves, 1 de junio de 2017 22:07
- Marcado como respuesta Joyce_ACModerator lunes, 12 de junio de 2017 16:13
Todas las respuestas
-
Hola Luis ECC
Probablemente en el command de tu conexión no le estés configurando un timeout apropiado, al ser un while supongo que irá a la base de datos varias veces, debes asegurarte abrir y cerrar conexión en cada llamada y/o darle un timeout al comando:
//100 segundos, por ejemplo: command.CommandTimeout = 100
Saludos
Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.
-
-
Pues este es el código
Private Sub revisar(mes As String, anho As String, cond As String)
Dim t As String()
Dim d As Data = New Data()
Dim i As Mantenimiento = New Mantenimiento()Dim carnet, nombre, grado, id_grado, fecha, monle, beca, cuo As String
Dim monto, recargo, descuento, total As Decimal
fecha = cmbFecha.Texti.EliminarTodo("facturas")Dim x As SqlDataReader = d.Buscar("SELECT cobros.carnet, cobros.apellidos, cobros.nombres, cobros.grado, cobros.matricula, cobros.cuota, grado.id_grado FROM Cobros INNER JOIN grado ON cobros.grado = grado.grado WHERE " & cond & " AND anho = " & anho & " ")While (x.Read())
carnet = x.GetString(0)
nombre = x.GetString(1) & ", " & x.GetString(2)
grado = x.GetString(3)
monto = x.GetDecimal(5)
id_grado = x.GetString(6)
beca = ""
cuo = 0
descuento = 0
total = 0
recargo = 5Dim tot As Decimal = monto + 5
If InStr(1, tot, ".", CompareMethod.Text) = 0 Then
monle = Num2Text(tot) & " DOLARES"
Else
t = Split(tot, ".")
If t(1).Length = 1 Then
monle = Num2Text(t(0)) & " CON " & t(1) & "0" & "/100 DOLARES"
Else
monle = Num2Text(t(0)) & " CON " & t(1) & "/100 DOLARES"
End If
End If
Dim cuota As SqlDataReader = d.Buscar("SELECT cuota FROM cuotas WHERE tipo = 'C' and id_grado = '" & id_grado & "' ")
cuota.Read()
cuo = CDec(cuota.GetString(0))If monto < cuo Then
beca = "(-) descuento por beca"
descuento = cuo - monto
total = cuo - descuento + recargo
monto = cuo
i.Agregar("facturas", "'" & carnet & "','" & nombre & "', '" & grado & "','" & fecha & "','" & mes & "', " & monto & ", " & recargo & ", " & descuento & ", " & total & ",'" & monle & "', '" & beca & "'")
Else
total = cuo + recargo
i.Agregar("facturas", "'" & carnet & "','" & nombre & "', '" & grado & "','" & fecha & "','" & mes & "', " & monto & ", " & recargo & ", null, " & total & ",'" & monle & "', '" & beca & "'")
End IfEnd While -
Olvidaste adjuntar la excepción que obtienes, de hecho noto algunas conversiones raras y la ejecución de consultas donde agregas los argumentos como parte de la cadena que contiene la consulta sql, lo cual no es correcto. Por otro lado, imagino que tienes configurado el atributo MARS para poder iterar por un cursor anidado, ¿verdad?
Sin embargo, creo que es innecesario el cursor anidado cuando puedes combinar la segunda consulta junto con la primera, ¿la tabla cuotas se encuentra en la misma base de datos o la misma instancia que las tablas Cobros y Grado?
Agrega un manejador de errores TRY-CATCH para obtener el mensaje de la excepción entre otros recursos para dar con el origen del error.
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios. -
-
No es ese el problema, ya que al hacer la consulta, si esta devuelve ejemplo 100 registros poco mas poco menos, se ejecuta con normalidad, el problemas es cuando debe mostrar más, después de un tiempo la app se detiene porque la conexión se cierra, es cuando da la excepción.
-
-
Gracias a todos por sus comentarios, el problemas era cuestión de optimizar la consulta, ya que aunque cambiara el timeout siempre pasaba los mismo. Era error de estructura de las instrucciones.
- Propuesto como respuesta Brayan De La Cruz jueves, 1 de junio de 2017 22:07
- Marcado como respuesta Joyce_ACModerator lunes, 12 de junio de 2017 16:13
-
No respondiste la pregunta: ¿la tabla cuotas se encuentra en la misma base de datos o la misma instancia que las tablas Cobros y Grado?, de hecho si se encuentra en la misma base de datos te evitas la consulta anidada porque podrías obtener las columnas mediante combinación.
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.