2011-10-12 66 views
2

我在Visual Studio中为Windows Phone创建一个应用程序,我需要一个字典数据库。我知道如何创建它,如何插入,更新和删除。Windows Phone 7.5预装的数据库芒果应用程序

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

PS。 linq中是否有体面的XML助手?例如,对于缓存xml文件...

+0

你能稍微更清晰这里.....它听起来像你tryi在下载应用程序之前将XML预安装到独立存储中......是吗? – Keeano

+0

我不知道这可以更清楚吗? 我想在用户安装应用程序时准备好数据库 也许不会在下载之前预先安装xml,只是数据和是的 –

回答

6

这并不能解决您使用Linq的XML帮助程序的情况,但处理此问题的好方法是单独创建数据库(如在控制台应用程序项目中)并加载它与你需要的数据。接下来,将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库下载一些示例代码

+0

好主意,那就是答案,如果可以的话,我会投票! –

+0

@Chris Koenig:您如何将预构建的数据库添加为项目的内容?我正在使用VS 2010 dev快车。我似乎找不到任何选项来添加数据库(.sdf文件)作为内容。 – gprasant

+0

您必须在解决方案的单独项目中创建它,然后手动将文件复制到电话项目,或使用BuildTasks。请记住,如果您的数据库保持只读状态,那么维护它的工作就很少。但是,如果您使用上述技术将其复制到IS并开始更改,则必须小心将来的部署,以确保您不会意外更换用户的现有数据库。 –

相关问题