Pregunta

En esta oración:

myCommand.ExecuteReader(CommandBehavior.CloseConnection)

¿cierra la conexión en caso de excepción?

¿Fue útil?

Solución

Hay muchas maneras en que el comando puede ir mal.

En última instancia, es el método Cerrar del lector de datos el que cerrará la conexión, siempre que nada haya salido mal antes.

Si hay una excepción dentro de ExecuteReader o cualquiera de sus métodos llamados, antes de que se construya el objeto DataReader real, entonces no, la conexión no se cerrará.

En caso de una excepción, no confiaría en que cierre la conexión.

Otros consejos

La forma más segura de hacer un " normal " la consulta es

using (var conn = new SqlConnection("..."))
{
    conn.Open();
    using (var cmd = conn.CreateCommand())
    {
        cmd.CommandText = "...";
        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                // ...
            }
        }
    }
}

Las excepciones se pueden capturar fuera de este código.

¡Depende de dónde ocurra la excepción!

Si estructura su captura de prueba correctamente, estará bien.

Por ejemplo:

SqlCommand myCommand = new SqlCommand();

try
{
   myCommand.dostuff();
}
catch(Exception ex)
{
  // display error message
}
finally
{
  myCommand.ExecuteReader(CommandBehavior.CloseConnection);
}

Si la línea: myCommand.ExecuteReader (CommandBehavior.CloseConnection) falla (¿tal vez la base de datos se ha caído?), la conexión no se puede cerrar mediante programación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top