It isn't yet clear what the right behaviour here is. By throwing an exception it also isn't totally clear that the connection get ever get back into a state where another command can be issued through it. This is probably going to be needed for transaction rollbacks, and maybe other things.
What is a better idea here?