Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   .NET (http://www.forosdelweb.com/f29/)
-   -   Intento no válido de FieldCount cuando el lector está cerrado. (http://www.forosdelweb.com/f29/intento-no-valido-fieldcount-cuando-lector-esta-cerrado-273325/)

almaluz 22/02/2005 16:33

Intento no válido de FieldCount cuando el lector está cerrado.
 
Hola,

Seguro que es un error "de Cajon" como se dice en mi tierra, pero no se a que puede deberse.

tengo este codigo, y agradecería "Pistas"

Gracias.

Sub Page_Load(obj As Object, e As EventArgs)

intpadre = Request.Params("padre")

If intpadre="" Then
intpadre = -1
End If

dgFamilias.DataSource = objFamilias.Llenar_Familias(intpadre)
DataBind()

End Sub

y aqui la funcion:

Public Function Llenar_Familias(intpadre As String) As OledbDataReader


' Definimos el comando que trae los datos mediante un store procedure llamado spfamilias
Dim ObjCmd As New OleDbCommand ("sppadre", ObjConn)
ObjCmd.CommandType=CommandType.StoredProcedure

Dim ObjParam As OleDbParameter

ObjParam = ObjCmd.Parameters.Add("@padre",OleDbType.BStr)
ObjParam.Value = intpadre


Dim ObjLector As OleDbDataReader

TRY
ObjConn.Open()
objLector = ObjCmd.ExecuteReader

Catch ex As OleDbException
throw ex
Finally
ObjConn.Close()
End Try

Return ObjLector

End Function


End Class

RootK 22/02/2005 17:50

Y donde estas definiendo tu objeto connection ?? :pensando:

Cita:

Public Function Llenar_Familias(intpadre As String) As OledbDataReader
??????? y objConn ?? :ojotes:

' Definimos el comando que trae los datos mediante un store procedure llamado spfamilias
Dim ObjCmd As New OleDbCommand ("sppadre", ObjConn)
Salu2

xknown 22/02/2005 21:52

Cuando se ejecuta:

dgFamilias.DataSource = objFamilias.Llenar_Familias(intpadre)

El DataReader que devuelves en la función Llenar_Familias, necesita una conexión abierta, pero dentro de esa función la estás cerrando:

Finally
ObjConn.Close()
End Try

Deberías cerrar la conexión despues de terminar de utilizar el DataReader. No sé si te sirva o no pero puedes cambiar la parte en que llamas al ExecuteReader por:

Try
ObjConn.Open()
objLector = ObjCmd.ExecuteReader(CommandBehavior.CloseConnecti on)
Catch ex As OleDbException
throw ex
End Try

Una observación, en la parte en la que manejas si se produce alguna excepción (catch), me parece que deberías agregar información adicional de la excepción, esto es muy útil para depurar.

Saludos


La zona horaria es GMT -6. Ahora son las 10:19.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2025, Jelsoft Enterprises Ltd.