This seems odd; the constructor signature is like a contract saying that it will use all those parameters, but it throws away most of them based on the first parameter. It is fibbing, or at the least misleading callers.

I'd expect two constructors, one that takes a connection string, and the other that takes the parts. 

Or, even more Java-y, a **factory** that takes a connection string, and if that returns null, then call the factory method that takes the parts.