So you have an application that needs to encrypt/decrypt data, but doesn't require the users to enter passwords to use it? First off, that sounds like a security hole right there - a hacker doesn't need to get the key or a password - they just need to get the application.
In order to do this securely, without storing the key in your application code, you would have to have some kind of password that came from the user that you could use to encrypt/decrypt the "real key" that is used to encrypt and decrypt the actual data.
If you are using a service to access the data, and no password is entered, you could generate a unique string from the machine information and use that as a type of password to encrypt your key.
To do this on multiple machines, each machine would have its own "password" generated from the machine information. This password would be used to generate a key (unique to that machine) which would then be used to encrypt a shared key (which is used to encrypt the actual data). This information would be stored in the database in a simple table with two columns: MachineID and EncryptedSharedKey.
At startup, the service would examine the machine info, generate its password, use that to generate its key, and use that key to decrypt the shared key from the database table. It would then be able to use that shared key to encrypt/decrypt data.
When you set up a new machine with the service, you would have a separate program that would read the shared key from a text file, generate the machine key, create a row in the table with the machine id and encrypted shared key, then delete the program and text file with the un-encrypted shared key in it.
This would be reasonably secure against someone copying your program to another machine, but really just relies on obscurity. If someone figures out how you generate the machine key, and has access to one of the machines with the service on it, they could generate the machine key themselves using the info from the compromised machine.