![]() |
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. |
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?? |
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. |
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. |
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? |
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:
Cita:
|
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. |
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 |
| La zona horaria es GMT -6. Ahora son las 09:28. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.