Windows Phone 7.5芒果应用程序上预装的数据库

时间:2011-10-12 21:33:12

标签: xml database windows-phone-7 isolatedstorage

我在Windows Phone Mango的visual studio中创建了一个应用程序,我需要一个字典数据库。我知道如何创建它,如何插入,更新和删除。

我有一个300k xml的数据文件,我想在该数据库中预加载(解析和插入 - 这不是问题)到应用程序中。问题是我不想在安装应用程序时这样做。我希望预先安装在隔离数据存储中的数据库文件。我也需要该系统,因为xml内容可能每3个月更改一次。但是,每次安装应用程序时,在手机上处理一个300k xml的文件 - 听起来很愚蠢...我可以预先安装数据库......

PS。 linq中有没有合适的XML助手?用于缓存xml文件,例如..

1 个答案:

答案 0 :(得分:6)

这并没有解决您使用Linq的XML帮助程序的情况,但处理此问题的一种好方法是单独创建数据库(如在Console应用程序项目中)并使用您需要的数据加载它。接下来,将SDF文件作为内容复制到Windows Phone项目中。最后,在部署应用程序时,将数据库从部署位置复制到隔离存储中。这样,您就不必处理XML文件或类似的东西。从部署位置复制到隔离存储是一件简单的事情。我正在撰写一篇(很长篇)博客文章,讨论所有相关内容,但您需要的核心代码是:

// Obtain the virtual store for the application.
IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForApplication();

// Create a stream for the file in the installation folder.
using (Stream input = Application.GetResourceStream(new Uri("ReferenceDB.sdf", UriKind.Relative)).Stream)
{
    // Create a stream for the new file in isolated storage.
    using (IsolatedStorageFileStream output = iso.CreateFile("ApplicationDB.sdf"))
    {
        // Initialize the buffer.
        byte[] readBuffer = new byte[4096];
        int bytesRead = -1;

        // Copy the file from the installation folder to isolated storage.
        while ((bytesRead = input.Read(readBuffer, 0, readBuffer.Length)) > 0)
        {
            output.Write(readBuffer, 0, bytesRead);
        }
    }
}

然后您可以正常连接数据库并整天读/写数据:

var db = new MyDataContext("Data Source = 'isostore:/ApplicationDB.sdf';");

您可以在https://github.com/ChrisKoenig/ReferenceDatabase

从我的GitHub存储库下载一些示例代码

-Chris