如何在 Windows Phone 应用程序中部署引用数据库

2012/2/9

使用 Windows Phone OS 7.1,您可以在本地数据库中存储引用数据,并通过 Windows Phone 应用程序对其进行部署。在设备上安装应用程序后,您可以将引用数据库保留在安装文件夹中进行只读连接,或将其复制到独立存储中进行读写操作。本主题介绍创建引用数据库并将其用在您的应用程序的过程。有关使用本地数据库的更多信息,请参阅 Windows Phone 本地数据库概述

重要说明重要说明:

在桌面上创建的 Microsoft SQL Server Compact (SQL CE) 数据库可以与 Windows Phone 应用程序一起使用,但未得到正式支持。

创建将通过主应用程序部署的本地数据库需要使用帮助器应用程序。帮助器应用程序在您的开发计算机上运行、在独立存储中创建本地数据库,并为数据库加载所需的引用数据。

在本节中,将创建帮助器应用程序、使用帮助器应用程序创建引用数据库,然后使用独立存储资源管理器 (ISETool.exe) 提取本地数据库文件并将其保存到您的计算机。有关独立存储资源管理器的更多信息,请参阅如何使用独立存储资源管理器工具

创建引用数据库

  1. 创建用来创建本地数据库并使用引用数据加载该数据库的帮助器应用程序。有关更多信息,请参阅如何为 Windows Phone 创建基本的本地数据库应用程序如何使用 MVVM 为 Windows Phone 创建本地数据库应用程序

  2. 将帮助器应用程序部署到 Windows Phone 模拟器或 Windows Phone 设备。

  3. 运行用来创建本地数据库并使用引用数据加载该数据库的相应帮助器应用程序。在独立存储中创建所有本地数据库。

  4. 获取应用程序的 Product GUID,它在 WPAppManifest.xml 文件的 App 元素的 ProductID 属性中指定。当您从独立存储复制本地数据库文件时将需要该信息。

  5. 当叠接设备或模拟器仍然运行时,使用独立存储资源管理器将本地数据库复制到您的计算机。有关更多信息,请参阅如何使用独立存储资源管理器工具

在您将本地数据库文件保存到计算机之后,可以将其添加到主应用程序,方式与添加其他类型的现有文件相同。

将引用数据库添加到您的应用程序

  1. 通过 Visual Studio,为使用引用数据库的 Windows Phone 应用程序创建一个项目。该应用程序(主应用程序)不同于帮助器应用程序。

  2. 从主应用程序的“项目”菜单中选择“添加现有项”

  3. “添加现有项”菜单中,选择您要使用独立存储资源管理器保存到计算机的本地数据库文件,然后单击“添加”。这样会将本地数据库添加到项目。

  4. “解决方案资源管理器”中,右键单击本地数据库文件,然后设置文件属性,以便将该文件生成为“内容”,并始终复制到输出目录(“始终复制”)。

当通过应用程序部署本地数据库时,数据库将存储在部署后的安装文件夹中。安装文件夹为只读。主应用程序可以通过只读方式连接到该数据库,或将其复制到独立存储以进行读写操作。本节更详细地介绍了这两种选项。

从安装文件夹读取

  • 当连接到安装文件夹中的引用数据库时,必须在连接字符串中使用 File Mode 属性将连接指定为只读。下面的示例演示如何建立与安装文件夹的只读连接。有关连接字符串的更多信息,请参阅 Windows Phone 本地数据库连接字符串

    // Create the data context.
    MyDataContext db = new MyDataContext("Data Source = 'appdata:/mydb.sdf'; File Mode = read only;");
    

    在本示例中,在文件路径中使用 appdata 前缀来区分安装文件夹 (appdata) 中的路径和独立存储 (isostore) 中的路径。若没有前缀,则数据上下文将应用独立存储的路径。

将引用数据库复制到独立存储

  • 若要将引用数据库从安装文件夹复制到独立存储,请执行基于流的复制。下面的示例显示了一个名为 MoveReferenceDatabase 的方法,该方法将名为 ReferencedDB.sdf 的本地数据库文件从安装文件夹的根目录复制到独立存储容器的根目录。

    using System;
    using System.IO;
    using System.IO.IsolatedStorage;
    using System.Windows;
    
    
    namespace PrimaryApplication
    {
        public class DataHelper
        {
    
            public static void MoveReferenceDatabase()
            {
                // 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("ReferenceDB.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);
                        }
                    }
                }
            }
        }
    }
    
    

显示: