Puede usar la misma conexión para cada uno de ellos, siempre que no intente ejecutar varias consultas al mismo tiempo en la misma conexión desde diferentes subprocesos.
En cuanto al lector de datos, en realidad no está reutilizando el lector, cada llamada a ExecuteReader
devuelve una nueva instancia de un nuevo lector, todo lo que está reutilizando es la variable que mantiene la referencia al lector. Aquí, en caso de que exista un problema, solo está cerrando explícitamente el último lector y dejando el primero para ser GC en algún momento posterior.
También puede reutilizar el comando, pero recuerde que si proporciona parámetros, etc., deberá borrarlos para la siguiente consulta, a menos que también se apliquen a la siguiente consulta.
Debe usar los bloques try/finally
para asegurarse de limpiar los recursos, o aquí hay un cambio rápido a su código para usar las declaraciones using
para asegurar la limpieza de recursos incluso si hay una excepción que impide el resto del código de ejecutar.
using (var myConnection = GetTheConnection())
{
myConnection.Open();
var myCommand = new MySqlCommand("SELECT * FROM table1", myConnection))
using (var myDataReader = myCommand.ExecuteReader())
{
while(myReader.Read())
{
//Perform work.
}
} // Reader will be Disposed/Closed here
myCommand.commandText = "SELECT * FROM table2";
using (var myReader = myCommand.ExecuteReader())
{
while(myReader.Read())
{
//Perform more work
}
} // Reader will be Disposed/Closed here
} // Connection will be Disposed/Closed here
Nota: GetTheConnection
es sólo una función de marcador de posición para lo que cada vez el mecanismo que está utilizando para obtener su instancia de conexión.
Debería considerar usar Entity Framework. –
Quizás útil: http://stackoverflow.com/questions/9705637/executereader-requires-an-open-and-available-connection-theconnections-curren/9707060 # 9707060 –
¿Su código anterior da algún error? Si no, entonces seguramente está bien. – sarwar026