como controlar un error de desconexión?

Iniciado por Frost, 23 Diciembre 2011, 14:44 PM

0 Miembros y 1 Visitante están viendo este tema.

Frost

Hola
Necesito ayuda para controlar un error de desconexion, cada 5 seg llamo a un procedimiento almacenado que esta en un servidor externo y si dentro de ese tiempo ocurre una desconexion, a pesar que modifique el timeout de la conexión, el sistema queda tratando de completar el ciclo, aun que la desconexion sea de menos de un segundo

quien me puede orientar un poco para saber como se manejan este tipo de incidencias?   :huh:

saludos

Novlucker

Con try/catch como casi cualquier error, y chequeando el estado de la conexión

¿Puedes mostrar el código que utilizas?

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Frost

#2
Son varias lineas de codigo pero es en esta parte donde llamó al procedimiento almacenado, tmb chequeo el estado de la conexión, el timer1 se ejecuta cada 5 segundos

Código (vbnet) [Seleccionar]
Private Sub ExecStoredProcedure()

       Try

           ' conexion con TIMEOUT= 4seg
           If sqlConnection.State = ConnectionState.Closed Then
               sqlConnection.Open()
           End If


           ' conexion con TIMEOUT= 3600 seg
           If sqlConnection2.State = ConnectionState.Closed Then
               sqlConnection2.Open()
           End If


           sqlCommand.Connection = sqlConnection
           sqlCommand.CommandType = CommandType.StoredProcedure
           sqlCommand.CommandText = "prcNIHoraServidor"
           sqlCommand.ExecuteNonQuery()

           lblCheckStatus.Visible = True
           lblCheckStatus.Text = "Conectado"
           lblCheckStatus.ForeColor = Color.Green
           BtnGrabar.BackColor = Color.Transparent
           BtnGrabar.Enabled = True

          Catch ex As Exception

           MsgBox(ex.Message, MsgBoxStyle.Critical, AcceptButton)
           lblCheckStatus.Visible = True
           lblCheckStatus.Text = "Desconectado"
           lblCheckStatus.ForeColor = Color.Red
           BtnGrabar.BackColor = Color.Red
           BtnGrabar.Enabled = False

       End Try

   End Sub


   Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

       ExecStoredProcedure()

       '==================================================================================
       '=========================eliminar los Console.WriteLine===========================
       '==================================================================================

       If sqlConnection.State = ConnectionState.Open Then
           Console.WriteLine("=========================================Open=========================================")
       ElseIf sqlConnection.State = ConnectionState.Closed Then
           Console.WriteLine("=========================================Closed=========================================")
       ElseIf sqlConnection.State = ConnectionState.Broken Then
           Console.WriteLine("=========================================Broken=========================================")
       End If

   End Sub


me sale este mensaje de texto


saludos

Novlucker

Lo que no termino de entender es "el sistema queda tratando de completar el ciclo", si sigues invocando al timer luego de que ha habido error es algo lógico, aunque quizás no estoy comprendiendo tu problema :-\.

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Frost

#4
he logrado ir filtrando el error y me encuentro que solo falla cuando ha ocurrido una desconexion y trato de hacer un UPDATE en cualquier procedimiento almacenado o tabla, obviamente trato de hacer el UPDATEuna vez que la conexión esta ON

Novlucker

Sigo sin entender, ¿qué método estas utilizando para el update? ¿Con que estas leyendo los datos?

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

gmarrero

Frost

Entiendo perfectamente lo que te pasa o pasaba (ya hace bastante tiempo que trataste el tema) y a la verdad estoy casi al tirar la toalla en lo que estoy haciendo.

En mi caso cuando trato de hacer un SELECT y tarda mucho la clase el SQLClient se me desconecta y muchas cosas que dependen de ella se cuelgan.

A la verdad que es mucha información la que le pido al controlador que haga ya que en estos momentos la BD está en 12 GB físico y hay más de 30 millones de registros y contando.

Estoy viendo la posibilidad de aplicar particionamiento vertical a la tabla de la BD que manipulo para ver que sale.

Si me da resultado le comento.

Saludos
______________________________________________
Si Dios es con nosotros!, ¿quien contra nosotros?

.::IT::.

Frost usa el evento StateChange de SqlConnection.

gmarrero, porque tienes la necesidad de consultar los 30 millones de registro de golpe, deberías consultar a demanda (paginando los resultados)
Simplemente .::IT::.