I was just reminded of an old truth when it comes to logging errors in a database: Do not enlist the error logging operation in the current transaction, if there is one! The default is to do just that, so be sure to add Enlist=false in your connection string used for logging:
<connectionStrings> <add name="myDb" connectionString="..." providerName="System.Data.SqlClient"/> <add name="logging" connectionString="...;Enlist=false" providerName="System.Data.SqlClient"/> </connectionStrings>
If you don’t, then the error logging will be rolled back with the transaction in case of an error. Not so good…
Also note that it’s a good idea to use separate connection strings for the normal database operations (which should be done inside transactions) and the logging operations (that shouldn’t).
Now that I have written this down I will hopefully remember this the next time I do error logging in a database…