Foros del Web » Programación para mayores de 30 ;) » .NET »

Excepción no controlada

Estas en el tema de Excepción no controlada en el foro de .NET en Foros del Web. Hola a todos, al ejecutar este proceso, Sub actualizamaquina() Dim p As New DAT.Funciones Dim pp As New DAT.Funciones sentencia = "SELECT * FROM EPLT ...
  #1 (permalink)  
Antiguo 23/03/2005, 02:36
 
Fecha de Ingreso: noviembre-2002
Mensajes: 249
Antigüedad: 21 años, 6 meses
Puntos: 0
Excepción no controlada

Hola a todos,

al ejecutar este proceso,

Sub actualizamaquina()
Dim p As New DAT.Funciones
Dim pp As New DAT.Funciones
sentencia = "SELECT * FROM EPLT INNER JOIN AART ON EPLT.CODREF = AART.CODREF WHERE (EPLT.CODMAQ =" & Me.maqori.Text & ") AND (AART.FAMILI = '" & Me.fami.Text & "')"
mireader = pp.retornaregistro(mico, sentencia)
While mireader.Read
refer = Mid(mireader("codref"), 4, 3)
Dim lon As Int32 = refer
If lon >= min And lon <= max Then
Me.proceso.Text = mireader("codref")
Dim r As String = mireader("codref")
Dim l As Int16 = mireader("numlin")
sentencia = "update eplt set codmaq=" & Me.maqnue.Text & " where codref='" & r & "' and numlin=" & l & ""
mireader2 = p.retornaregistro(mico2, sentencia)
mireader2.Close()
End If
End While
mireader.Close()
End Sub


me sale el siguiente error, (no se produce la primera vez, sale despues de haberse ejecutado varias veces el while).

Excepción no controlada del tipo 'System.Data.SqlClient.SqlException' en system.data.dll

El programa para en la funcion retornaregistro. (lrea = Lcom.ExecuteReader, que se llama desde mireader2 = p.retornaregistro(mico2, sentencia)).

Public Function retornaregistro(ByVal conf As BLL.Datos, ByVal sql As String) As SqlClient.SqlDataReader
Dim Lcom As New System.Data.SqlClient.SqlCommand(sql, conf.conex)
Dim lrea As SqlClient.SqlDataReader
lrea = Lcom.ExecuteReader
Return lrea
End Function


No se si queda claro, pero no veo que es lo que me está pasando.
  #2 (permalink)  
Antiguo 23/03/2005, 04:01
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 6 meses
Puntos: 8
donde declaras mireader2???
de que tipo es???
todos los valores que les pasas a las consultas tienen valores correctos???

has probado a ejectutar paso a paso??
  #3 (permalink)  
Antiguo 23/03/2005, 05:16
 
Fecha de Ingreso: noviembre-2002
Mensajes: 249
Antigüedad: 21 años, 6 meses
Puntos: 0
Dim mireader2 As SqlClient.SqlDataReader

Lo he ejecutado paso a paso y en principio, funciona bien, al cabo de un rato, da el error, si imaginemos hay 500 registros, pues actualiza 20 y luego da el error.

En el registro que da el error, todo es correcto, la sql está bien.


Es lo que me extraña.
  #4 (permalink)  
Antiguo 23/03/2005, 06:00
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 6 meses
Puntos: 8
Cierra, la conexión cada vez que hagas una actualización y luego vuelve a abrirla, quizá estés abriendo una conexión para cada una de las actualizaciones y de el error por tener demasiadas conexiones abiertas simultaneamente.

En el registro, que te da el error Me.maqnue.Text, r y l tienen algún valor??????
bueno, sólo r y l, por maqnue.text siempre será el mismo supongo.
  #5 (permalink)  
Antiguo 23/03/2005, 07:21
 
Fecha de Ingreso: noviembre-2002
Mensajes: 249
Antigüedad: 21 años, 6 meses
Puntos: 0
r, l, tienen valor.

Dentro del while he puesto:

Dim mico2 As BLL.Datos = New BLL.Datos
Dim mireader2 As SqlClient.SqlDataReader
re = mireader("codref")
li = mireader("numlin")
ve = mireader("versio")
sentencia = "update eplt set codmaq=" & Me.maqnue.Text & " where codref='" & re & "' and numlin=" & li & " and versio=" & ve & ""
mireader2 = p.retornaregistro(mico2, sentencia)
mireader2.Close()
mico2.conex.Close()


Cada vez cierro la conexion y la abro.

Pasa lo mismo. Me hace 10 o 15 registros y me da el error.

Puede ser por algun porblema de tiempo, o algo asi?

Última edición por jordan; 23/03/2005 a las 07:22
  #6 (permalink)  
Antiguo 23/03/2005, 08:51
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 3 meses
Puntos: 50
Te recomiendo que cuando hagas update, delete, insert uses el executenonquery, ya que no hay necesidad de usar un datareader.

Te podría quedar así:

Cita:
...
...
While mireader.Read
refer = Mid(mireader("codref"), 4, 3)
Dim lon As Int32 = refer
If lon >= min And lon <= max Then
Me.proceso.Text = mireader("codref")
Dim r As String = mireader("codref")
Dim l As Int16 = mireader("numlin")
sentencia = "update eplt set codmaq=" & Me.maqnue.Text & " where codref='" & r & "' and numlin=" & l & ""
p.retornaregistro(mico2, sentencia)
mireader2.Close()
End If
End While
...
...
y en tu método:

Cita:
Public Sub retornaregistro(ByVal conf As BLL.Datos, ByVal sql As String)
Dim Lcom As New System.Data.SqlClient.SqlCommand(sql, conf.conex)
conf.conex.open()
Lcom.ExecuteNonQuery()
conf.conex.close()
End Sub
Pruebalo y cualquier cosa por aqui andamos...
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #7 (permalink)  
Antiguo 23/03/2005, 10:28
 
Fecha de Ingreso: noviembre-2002
Mensajes: 249
Antigüedad: 21 años, 6 meses
Puntos: 0
He provado, y sigue pasando lo mismo,

Puede ser, que al hacer el select de la tabla y luego haga el update de la misma tabla y aunque tenga dos conexiones diferentes, haya algun bloqueo que me provoque el error?

No entiendo que haga unos cuantos y luego me de el error.
  #8 (permalink)  
Antiguo 23/03/2005, 11:02
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 6 meses
Puntos: 8
Eso es lo raro!!!!!!!!!!!!!!
Porque si existiese bloqueo, te bloquearía todos, no???

Que gestor de B.D. estas usando???Access???

Yo voy a intentar hacer algo parecido con el mío haber que tal
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:58.