yho_12 Posted June 21, 2011 Report Share Posted June 21, 2011 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 More sharing options...
key_master84 Posted June 21, 2011 Report Share Posted June 21, 2011 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 More sharing options...
Argel Posted June 21, 2011 Report Share Posted June 21, 2011 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 More sharing options...
key_master84 Posted June 22, 2011 Report Share Posted June 22, 2011 Lo mismo que dice argel era lo que trataba de explicar yo, ahora la otra solucion que puedes hacer es meter los datos en una matriz o lo que mejor se acomode si lo que deseas es no usar un data set, saludos, Link to comment Share on other sites More sharing options...
yho_12 Posted June 22, 2011 Author Report Share Posted June 22, 2011 El dataset en ese caso tendria que tener la estructura de lo devuelto , o encierto modo vale solo igualar las declaraciones: ej : dim dsDatos as dataset = <datareader> Link to comment Share on other sites More sharing options...
key_master84 Posted June 22, 2011 Report Share Posted June 22, 2011 Mira lo que yo he hecho en esos casos es crear una función que devuelve un datatable y ese lo uso como datasource del objeto si es que quieres solo mostrar la tabla entera en pantalla(yo solo trabajo con el datareader) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now