Ok, it doesn't look like anybody else is going to suggest anything so spent some time digging round the source and in my situation it looks as though I'm having problems with the global.asax file which means the NopConfig isn't being initialized, and thus the connection string isn't being picked up.
Not sure if it's the same for you, but worth a try?
I've written a membership provider for our sites which uses the Nop database, and packaged it up with various other stuff into a web library for use across our sites. Today I added to the web library a reference to the Nop business logic DLL so I can get access to the CustomerManager and other code that the Nop guys have already written for setting user attributes etc. I'm not sure how I expected it to work without setting a connection string ;) but of course it didn't work.
I've breakpointed the store and indeed the web.config connection block is sent to the business logic DLL at application start.
What I'm wondering if anyone has any ideas for how I can use the business logic DLL in my web library DLL which will be used by a number of sites (3 or more). The best thing I can think of is to copy the config block from the store into the web.config of each site and call NopConfig.Init(); from Application_Start in each site's global.asax, just like NopCommerce does. While I imagine this work (? will test tommorow) does anyone have any better ideas? I'd rather hard code the connection string into one place than have to ensure that all current and future sites have a Nop config block and a global.asax. Something more elegant would be even better.