Generally you should store data (on Vista at least) in either the users AppData directory (for per user data, like remembering configuration settings), or in ProgramData for machine wide data. You should always have read and write access to these.
They may be in different places on different versions or windows, and users may move them so you should use the suitable API's (check MSDN, I only remember the C-API methods) to get the paths for them.
You can NOT guarantee you have write access to the programs directory on the users computer, only read access.
As for structuing your code, in a single threaded enviroment I useually make the database connection object somewhere easily accessible (either global, or in the applications main class), and write the SQL stuff inline where its needed.
For very large projects or if there a lot of repeated queries you may want to create a DataBase class which connects when its constructed, and has methods for all the queries you need (eg DataBase.GetClientList to get a list of Client objects from the database). This would also give you an easy way to ensure that your not using a single connection object from multiple threads at once.