tags:

views:

232

answers:

2

Hi, I have a simple WPF application that uses ClickOnce to handle installing. Within this application is a compact database. Through testing I have found that when I publish a new build this database will get overwritten, which is not what I want. Is there anyway I can have fine grained control over what files are updated? I assume ClickOnce is simply checking the hash of the database file, deciding that it has changed and pulling the update.

As a workaround I have since removed the database from the files that are included with the published application so the original remains on the client machine after an update, untouched.

Not a great solution I know

Thanks,

A: 

ClickOnce deployments segregate the Application Files into "Include" or "Data file". You can specify what each file is in visual Studio by going to the project Properties page, Publish tab, then clicking the "Application Files..." button. You can then set your .sdf file to "Data File" under the Publish Status column.

Data Files that are downloaded with a ClickOnce application are then placed in a separate directory for each new version.

The idea is that on the first run of the new application version, you go retrieve all the user's private data from their old-version data files and incorporate that data into the new data files which have just been downloaded with your new version.

I think you'll find the information you need at Accessing Local and Remote Data in ClickOnce Applications. Specifically, look at the sections "ClickOnce Data Directory" and "Data Directory and Application Versions."

To access a SQL Server CE database located in your Data directory, use a connection string similar to the following:

<add
  name="MyApplication.Properties.Settings.LocalCacheConnectionString"
  connectionString="Data Source=|DataDirectory|\LocalCache.sdf"
  providerName="Microsoft.SqlServerCe.Client.3.5" />

The "|DataDirectory|" is a special syntax supported by SQL CE and SQL Express and resolves at runtime to the proper directory.

Mike Schenk
+1  A: 

If you so much as open that SQLCE database included in your project, it will change the time stamp on the database, and ClickOnce will deploy it and put the old version under the \pre subfolder.

You might want to consider this method for handling this. Then if you accidentally deploy a new version of the database and don't realize it, you're not hosed. If you intentionally make changes, you can change the database structure of your current database with SQL queries, and pull data from the new copy deployed to the Data Directory (that you're otherwise ignoring) when you need to.

RobinDotNet

RobinDotNet