Just like the way the web.config in ASP.NET apps can be encrypted, you could also encrypt the app.config. The encryption is transparent to the running code so you don't need to change your code. You'll need to jump through some hoops to perform this encryption, though, because there are no built in tools in the SDK to perform this encryption for desktop apps, unlike ASP.NET apps which have regiis.exe which let's you do the encryption. It's not difficult to build up your own tool to do this. Just inconvenient.
So the upside is that this is the most secure way to do what you want because each encrypted version is per machine/per user specific (unless someone has been illegally cloning machine). The downside on top of the need to create your own tool, is that you have to perform the encryption either at install time or first run. So your secrets still need to be delivered to the user unprotected until you get a chance to protect it.
Anyway, why is the desktop app accessing the (shared) database directly? If the database needs to be secured, then put a web service in front of the database and have your app authenticate against the web service and send it's queries to the web service. Then at that point the only secrets stored on the machine are the per user secrets needed to logon to the web service. Each user should have their own credentials for auditability.
Then it'll be the users responsibility to keep their credentials on their own machine secure. You could likely help them out by doing some on the fly encryption and decryption of their credentials in your app.config using either DPAPI built into Windows (the more secure route), or just use some of the symmetric encryption built into the .NET Framework. For the symmetric encryption, the problem then becomes how to secure the key you use for the encryption.