28. January 2013 14:26
Today, I faced the exception mentioned in the post title: SQL Server Compact timed out waiting for a lock. The default lock time is 2000ms for devices and 5000ms for desktops. The default lock timeout can be increased in the connection string using the ssce: default lock timeout property. (Plus some session details).
The exception was thrown in my local dev environment while working on our Orchard CMS based portal software discoverize, calling any page in the portal. Obviously, something was wrong not with a single page but rather with a piece of infrastructure. Interestingly enough, only a few moments before trying to open the web site I had done some database manipulation using SqlCeCmd deleting some unneeded columns from one of our tables. It seems that after that the site broke.
I tried to get hold of the DB like this:
- stop and start the web site in IIS (using appcmd stop site "discoverize" and appcmd stop site "discoverize") – no change
- take DB offline by renaming the file – waited a few moments, renamed it back – no change! Here I started wondering where the lock is saved – is it inside the DB?
- took the whole application pool offline and restarted it – bang! That helped.
I now have my site back up and running and can continue develepment.
If you encounter the SQL CE timeout error during development inside a web application, restarting the app's app pool will probably get you back to work.