Jump to content

Recommended Posts

Llegandoo ya al fin de mi proyecto , me dispuse a hacer la optimización de codigo , en aqul momento pense hacer funciones que hagan las consultas y devuelvan el datareader ...

 

Lo programe pero al momento de hacer un return <mysqldatareader> no lo retorna ..

 

Aqui una copia de la Funcion:

 

 

 

 

Public Function selectEngine(ByVal sqlQuery As String) As MySqlDataReader

 

Try

'Abrir conexion

 

If conex.State = ConnectionState.Closed Then

conex.Open()

End If

 

'Crear datareader y ejecuta consulta

Dim consulta As New MySqlCommand(sqlQuery, conex)

Dim sel As MySqlDataReader = consulta.ExecuteReader()

 

Return sel

'Errores

 

Catch ex As Exception

 

conex.Dispose()

MessageBox.Show("Se ha producido un error al establecer la conexión remota." & Err.Description)

 

Finally

'Cerramos la conexión

If conex.State = ConnectionState.Open Then

conex.Close()

End If

'Eliminamos el objeto

conex.Dispose()

 

End Try

 

End Function

 

 

 

Lo llama un codigo asi

 

dim sql as string = "select ...."

dim datos as mysqldatareader = selectEngine(sql)

 

while datos.read

....

 

PD: CUANDO DEPURO ME MUESTRA QUE EL DATAREADER EN LA FUNCION SI CONTIENE ELEMENTOS y el error dado al leer "datos" es que no se puede leer por que esta cerrado

Link to comment
Share on other sites

Por lo que vi en tu codigo lo que estas haciendo es cerrar la conexion con la base de datos antes de entregar los datos o sea cierras la conexion y una vez cerrada intentas leer cosa que no podras, una solucion seria no cerrar la conexion procesar los datos y despues cerrarla, eso,

 

cualquier cosa me avisas,

 

Saludos

Link to comment
Share on other sites

El DataReader es un objeto que recorre solo hacia adelante y fila a fila un conjunto de resultados de una llamada SQL, manteniendo la conexion correspondiente tomada mientras opera con cada fila.

El problema que tienes es eso, no puedes devolver un DataReader si cierras la conexion, esta debe quedar abierta. Por lo tanto para estos casos creo yo es mas reconmendable utilizar un DataSet ya que te permite operar sobre los datos de manera offline

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...