Click here to Skip to main content
Click here to Skip to main content

How to Use Existing Database in Windows Phone

By , 5 May 2013
 

Introduction

Normally in Windows Phone apps, we used to create a database in the Application Launch event, like the following:

if (!dataContext.DatabaseExists())
{
	dataContext.CreateDatabase();
}

And if there are any master tables, you can write code to insert after database creation, like this:

if (!dataContext.DatabaseExists())
{
    dataContext.CreateDatabase();
    dataContext.Categories.InsertAllOnSubmit(
        new[] { DefaultCategory });
    dataContext.SubmitChanges();
}

This approach is not feasible if you have a lot of data, for example a Dictionary database. In such scenarios, you can add the existing database to the project, and set the Build Action to Content.

Properties Window - Build Action - Content

This will deploy the database file with your application onto the phone, but it will be placed in the same folder as all other static content for your application. Your application can only read from this folder.

You can communicate to the existing database using the following connection string:

private const string ConnectionString = 
"Data Source ='appdata:/Database/Dictionary.sdf';File Mode=read only;";

If you want to modify the database, you need to copy (duplicate) the database to the application isolated storage. Here is the code snippet which will help you to copy your database file to isolated storage.

const string DatabasePath = "Database";
const string Filename = @"Database/Dictionary.sdf";
using (var isolatedStorageFile = 
    IsolatedStorageFile.GetUserStoreForApplication())
{
    if (!isolatedStorageFile.DirectoryExists(DatabasePath))
    {
        isolatedStorageFile.CreateDirectory(DatabasePath);
    }

    if (isolatedStorageFile.FileExists(Filename))
    {
        return;
    }

    var resource = 
        Application.GetResourceStream(new Uri(Filename, UriKind.Relative));
    using (var file = isolatedStorageFile.CreateFile(Filename))
    {
        var length = resource.Stream.Length;
        var buffer = new byte[1024];
        var readCount = 0;
        using (var binaryReader = new BinaryReader(resource.Stream))
        {
            while (readCount < length)
            {
                int actual = binaryReader.Read(buffer, 0, buffer.Length);
                readCount += actual;
                file.Write(buffer, 0, actual);
            }
        }
    }
}

Happy programming!

Related Content

  1. Isolated Storage in C#
  2. Uploading Files using Webservice
  3. Upload multiple files using Silverlight
  4. How to Store and Retrieve files from SQL Server Database
  5. Quick introduction to SQLite with C#

License

This article, along with any associated source code and files, is licensed under The MIT License

About the Author

Anuraj Parameswaran
Technical Lead Accel Frontline Ltd
India India
Member
Working as Tech. Lead in Accel Frontline Ltd.
 
My blog : dotnetthoughts.net.
You can follow me in twitter : @anuraj

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
-- There are no messages in this forum --
Permalink | Advertise | Privacy | Mobile
Web03 | 2.6.130513.1 | Last Updated 5 May 2013
Article Copyright 2013 by Anuraj Parameswaran
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid