Essentially, no. If code on the local machine can be run by one process, it can be run by any process with access the the assemblies' data. There are various ways to make it difficult but not impossible. If an attacker has access to the machine and time, you can't prevent access.
There is one way to protect yourself: don't have the code on the local machine
- provide a remote service and call it
- provide the software on a hardware dongle
- use hardware encryption (like Trusted Platform Module)
Specifically for SQL connections, you could use an externally trusted connection -- like Active Directory or Kerberos. Most enterprise Sql Servers will support this. It will require your users to 'log in' to your app, but .Net supports protecting credentials in RAM