2011-10-12 105 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並開始更改,則必須小心將來的部署,以確保您不會意外更換用戶的現有數據庫。 –

相關問題