Returning latest database ID
You really shouldn't rethrow caught exceptions like that.

catch (Exception ex) //Could I just omit this block?
    {
        throw ex;
    }


Erases the call stack of the exception, instead use

catch (Exception) //Could I just omit this block?
    {
        throw;
    }


However the point is moot, because the try-finally block is syntactically legal, but you should bear in mind a very major caveat (emphasis my own):


  Within a handled exception, the associated finally block is guaranteed to be run. However, if the exception is unhandled, execution of the finally block is dependent on how the exception unwind operation is triggered. That, in turn, is dependent on how your computer is set up.


As such, it would be a good idea to make sure you catch any exceptions you can reasonably expect, but then that's just standard good practice.

As an aside, I really don't like your use of caps. Type names should be PascalCase, and you should avoid underscores in type names or variable names.

Lastly, you really should throw a subclass of Exception, and never the parent class.