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
Con try/catch como casi cualquier error, y chequeando el estado de la conexión
¿Puedes mostrar el código que utilizas?
Saludos
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
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
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
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
Sigo sin entender, ¿qué método estas utilizando para el update? ¿Con que estas leyendo los datos?
Saludos
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
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)