Why care about opening connections either?

If a business app developer shouldn't care about closing a connection, it should care less about opening it.

This step prior to executing any statement against a database seems natural to most of us today because it's what we've been doing for ages now. However, connecting to a database implies a lot of knowledge and a developer should never care about this.

Also lots of quite deep technical decisions are made at the connection statement. The "connection string" is usually a text blob of all sorts of potentially dangerous knobs and levers: resource restrictions (pool management params), timeouts, security configurations, etc.

How many apps fail to work when moved from dev to test and then to production because the connection string is "hardcoded" or is buried somewhere in an obscure .ini (or .config) and assumptions on one environment are simply wrong in another?

Again, connection to a db is a serious business. The underlying architecture in which a program or component runs should take care of that for all of us simple mortals writing "business logic". Database connectivity, location, security considerations are all a different "concern" and its better to keep it separated from the business code.