Professional Programmer Notes

or just call this my soapbox

.NET Devs: Make |DataDirectory| resolve to a path of your choosing

leave a comment »

I’m working on a desktop application that uses and embedded database. In my case, I’m using Sql Server Compact Edition 4.0 with Entity Framework 4.1. This tip could also apply to usage of Sqlite. In my app.config file, I have a connection string that tells my application to put the database in the “Data Directory” by using a syntax similar to this:

  <connectionStrings>
    <add name="DbConnection"
         connectionString="data source=|DataDirectory|\MyDb.sdf"
         providerName="System.Data.SqlServerCe.4.0" />
     ...

In ASP.NET, the |DataDirectory| token would expand to an App_Data folder under the root of my web application. For desktop applications, it is the bin directory. But, what if I wanted to point to a different location?

It turns out that DataDirectory is a macro. It is resolved using the AppDomain. The following line of code allows me to set the DataDirectory path prior to using the connection string:

AppDomain.CurrentDomain.SetData("DataDirectory", @"C:\temp\data");

That would expand my connection string to: data source=C:\temp\data\MyDb.sdf

Advertisements

Written by curtismitchell

June 21, 2011 at 2:14 pm

Posted in Uncategorized

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: