Hrm. It appears that I wasn't setting InitialCatalog when building the connection string, at least not in the right place. You don't have to have an initial catalog when testing a connection to a database, which is code near what I'm doing, but you do have to have it to access database tables. I was worried that it was something simple - turns out it was. Upon reflection, I'm kind of glad.