Search code examples
sqlexception

calling ExecuteReader() from catch block


I have the following code and when exception happens the ExecuteReader() in Catch block will hang the app.

My question is why the hang? I can't perform query inside of Catch block if query exception happens in general?

Try {
   // some SQL queries
}
catch (SqlException odbcEx) {
   // do some queries with IDbCommand::ExecuteReader()
}
catch (Exception ex) {
   // Handle generic ones here.
}

Thanks,


Solution

  • The ExecuteReader() keeps hold of your SQL connection. What you want to do is wrap a using statement round it. Also, you can't perform a SQL query because you have essentially errored and lost scope of your SQL connection variable. If you want, you can do some further SQL in the exception block by instantiating a new instance of your reader and connection, however ideally close of your existing connection before doing so. If you use a datatable you won't keep hold of the SQL connection. Perhaps something to look at.

    For example:

    using (var conn = new SqlConnection("ConnectionString"))
    {
    try {
       // some SQL queries
    }
    catch (SqlException odbcEx) {
       // do some queries with IDbCommand::ExecuteReader()
    }
    catch (Exception ex) {
       // Handle generic ones here.
    }
    finally {
      conn.Close();
    }
    }
    

    This way you are disposing of your connection and not keeping hold of it.