使用 SQL Server Mobile 创建移动应用程序

使用 SQL Server Mobile 创建移动应用程序 

在此演练中,您将学习如何在使用 SQL Server 2005 Mobile Edition (SQL Server Mobile) 的 Visual Studio 2005 中创建应用程序。SQL Server Mobile 数据库将作为 SQL Server 2005 发布的订阅服务器,并使用合并复制来交换信息。

在此演练中,您将执行下列任务:

  1. 配置 SQL Server 2005 发布。
  2. 配置 Internet 信息服务 (IIS) 以进行复制。
  3. 创建 SQL Server Mobile 订阅。
  4. 创建应用程序。
  5. 部署应用程序并测试订阅。
必备项

若要按照此演练中所写的内容执行此演练,您需要满足下列条件:

  • 安装有 Windows XP 和 IIS 的计算机
  • Visual Studio 2005
  • SQL Server 2005,与 Visual Studio 安装在同一台计算机上
SQLServer 2005 任务

在创建应用程序之前,必须在 SQL Server 2005 中配置发布。在下列步骤中,您将创建一个示例数据库,然后从该数据库发布数据。您将使用预建的脚本文件创建数据库,然后使用新建发布向导创建发布。

创建数据库并在其中填充数据
  1. 打开 SQL Server Management Studio。

  2. 当提示您连接服务器时,请在“服务器名称”中键入 (local),然后单击“连接”。

  3. 打开一个新查询窗口。创建一个 SQLMobile 数据库,并在该数据库中填充数据。

    USE master;
        GO
        DROP Database SQLMobile;
        GO
        CREATE DATABASE SQLMobile;
        GO
        USE SQLMobile;
        GO
        CREATE TABLE MembershipData (MemberID INTEGER IDENTITY (1,1) CONSTRAINT pkMemberID PRIMARY KEY, MemberName NVarChar (50));
        CREATE TABLE FlightData (MemberID INTEGER FOREIGN KEY REFERENCES MembershipData(MemberID), Destination NVarChar (50), FlightStatus NVarChar(50), ArrivalDate DATETIME, FlownMiles INTEGER);
        INSERT INTO MembershipData (MemberName) VALUES ('Mr Don Hall');
        INSERT INTO MembershipData (MemberName) VALUES ('Mr Jon Morris');
        INSERT INTO MembershipData (MemberName) VALUES ('Ms TiAnna Jones');
        INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) VALUES (1, 'Seattle', 'Flight Delayed 1 hour', '8/25/00', '20000');
        INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) VALUES (2, 'London', 'Flight on time', '9/12/00', '15000');
        INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) VALUES (3, 'Sydney', 'Flight Gate Closing', '11/5/00', '30000');
        INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) VALUES (1, 'Tokyo', 'Delayed Fog', '5/25/00', '25000');
        INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) VALUES (2, 'Minneapolis', 'Flight on time', '5/1/00', '1000');
        INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) VALUES (3, 'Memphis', 'Flight Gate Closing', '1/5/00', '1000');
  4. 单击“执行(!)”运行该脚本并创建数据库。此时,将运行该脚本,创建一个名为 SQLMobile 的新数据库。

    注意:
    您还可以按 F5,或者从“查询”菜单中选择“执行”来运行该查询。

     

     

  5. 若要确认已创建该数据库,请在对象资源管理器中,依次展开“(本地)”、“数据库”和“SQLMobile”。如果未列出该 SQLMobile 数据库,请通过右键单击“数据库”,再选择“刷新”,来更新数据库列表。

准备服务器以发布数据

在创建发布之前,必须创建快照代理用户帐户,并创建一个将在其中存储快照文件的共享文件夹,准备服务器以进行发布。创建快照文件夹之后,该文件夹将用于服务器上的所有发布。如果以前已在此服务器上创建了发布,您可以跳过这些步骤。

创建快照用户帐户
  1. 在“开始”菜单上,右键单击“我的电脑”,然后选择“管理”。

  2. 在“计算机管理”中,展开“系统工具”,展开“本地用户和组”,右键单击“用户”,然后选择“新用户”。

  3. 在“新用户”对话框中,键入以下信息,然后单击“创建”:

字段

用户名

snapshot_agent

密码

p@ssw0rd

确认密码

p@ssw0rd

用户下次登录时须更改密码

未选中

密码永不过期

选中

重要事项:
这些设置仅用于测试。在生产环境中,请确保用户帐户设置符合您的网络安全性要求。许多情况下,对于快照代理您将使用域用户帐户而不是使用本地用户帐户。

 

 

创建快照文件夹
  1. 在 Windows 资源管理器中,创建一个名为“snapshot”的新文件夹。在此演练中,您可以在驱动器 C 的根目录下创建该文件夹:c:\snapshot。右键单击“快照”文件夹,选择“共享和安全”。

  2. 在“共享”选项卡上,选择“共享该文件夹”,然后单击“权限”。

  3. 在“快照的权限”中,单击“添加”。

  4. 在“输入要选择的对象名称”中,键入 computername\snapshot_agent(其中 computername 是您本地计算机的名称),然后单击“确定”。

  5. 在“快照的权限”中,选择“snapshot_agent”,分配“更改”和“读取”共享权限,然后单击“确定”。

  6. 选择“安全”选项卡。

  7. 单击“添加”。

  8. 在“输入要选择的对象名称”中,键入 computername\snapshot_agent(其中 computername 是您本地计算机的名称),然后单击“确定”。

  9. 选择“snapshot_agent”,然后将“写入”权限添加到允许的权限列表中。现在,snapshot_agent 帐户将被授予下列权限:

    • 读取和运行
    • 列出文件夹目录
    • 读取
    • 写入
  10. 单击“确定”关闭“快照属性”窗口。

  11. 关闭 Windows 资源管理器。

创建发布
  1. 在对象资源管理器中,展开“(本地)”节点(如果当前尚未展开),然后展开“复制”。

  2. 右键单击“发布”文件夹,然后选择“新建发布”。

  3. 在新建发布向导简介屏幕上,单击“下一步”。

  4. 如果以前未曾在此计算机上创建发布,将提示您配置分发服务器。选择第一个选项将本地计算机作为它自己的分发服务器,然后单击“下一步”。

  5. 如果以前未曾在此计算机上创建发布,将提示您指定快照文件夹。键入在前面过程中创建的快照文件夹的共享路径。以 \\servername\share 格式键入共享路径,不要键入本地路径。在此演练中,我们建议您键入 \\computer\snapshot(其中 computer 是您计算机的名称),然后单击“下一步”。

  6. 在数据库列表中,选择“SQLMobile”,然后单击“下一步”。

  7. 在发布类型列表中,选择“合并发布”,然后单击“下一步”。

  8. 在“订阅服务器类型”页中,选择“是”启用对 SQL Server Mobile 订阅服务器的支持,然后单击“下一步”。

  9. 在要发布的对象列表中,选中“表”复选框。如果展开“表”,您将发现 SQLMobile 数据库中的两个表都已被选中。单击“下一步”。

  10. 会通知您将向表中添加唯一标识符。所有合并项目都需要一个 uniqueindentifier 列。单击“下一步”。

  11. 在“筛选表行”页中,现在即可添加对已发布数据的筛选器。对于此演练,您将无需筛选数据。单击“下一步”。

  12. 在“快照代理”页中,您可以配置创建快照的时间以及快照代理运行的频率。单击“下一步”以接受默认设置。

  13. 在“代理安全性”对话框中,单击“安全设置”。

    1. 在“快照代理安全性”对话框中,输入前面过程中所创建帐户的登录信息。进程帐户为 computer_name\snapshot_agent(其中 computer_name 是您计算机的名称),密码为 p@ssw0rd。
    2. 单击“确定”以保存设置。
    3. 在“代理安全性”页中,单击“下一步”。
  14. 在“向导操作”屏幕上,您可以确定创建发布的时间以及是否希望创建脚本文件。单击“下一步”以接受默认选择。

  15. 在“完成该向导”屏幕上,键入 SQLMobile 作为发布的名称,然后单击“完成”。

  16. 将创建发布。向导完成后,单击“关闭”。

保护发布的安全性

若要保护发布,您必须首先向数据库安全列表中添加 IIS 匿名用户帐户,然后将该帐户添加到发布访问列表 (PAL) 中。

保护发布
  1. 在对象资源管理器中,展开“安全性”,右键单击“登录”,然后选择“新建登录”。

  2. 在“新建登录”对话框中,选择“Windows 身份验证”,键入 computername\iusr_computername(其中 computername 是您计算机的名称)。

  3. 在导航窗格中,选择“数据库访问”窗格。

  4. 在数据库列表中,选择“SQLMobile”,然后单击“确定”。

  5. 在对象资源管理器中,展开“复制”,展开“发布”,右键单击“SQLMobile:SQLMobile”发布,然后选择“属性”。

  6. 在导航窗格中,选择“发布访问列表”。

  7. 单击“添加”。在“添加发布访问项”对话框中,列出了 IUSR 帐户。选择该帐户,然后单击“确定”。

  8. 请确保 IUSR 帐户当前位于 PAL 中,然后单击“确定”。

配置 IIS 和 SQLServer 2005 以进行 Web 同步

既然 SQL Server 已经配置了发布,您必须使该发布可以由 SQL Server Mobile 客户端通过网络进行访问。SQL Server Mobile 通过 IIS 连接到 SQL Server。特别是,您可以创建并配置一个虚拟目录,以允许客户端访问 SQL Server Mobile 服务器代理。

安装 SQLServer Mobile 服务器组件
  1. 在 Windows 资源管理器中,导航到以下目录:

    C:\Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE

  2. 双击 sqlce30setupen.msi 运行安装程序。

  3. 在“安装”向导的简介屏幕上,单击“下一步”。

  4. 阅读并接受 EULA 条款,然后单击“下一步”。

  5. 在“系统配置检查”屏幕上,确保所有项都通过检查。如果尚未安装 SQL Server 2000,将列出该列表的最后一项作为警告。因为您正在使用 SQL Server 2005,这并不是问题。单击“下一步”。

  6. 在接下来的屏幕上,单击“下一步”,然后单击“安装”开始安装。

  7. 单击“Finish”。

配置发布以进行 Web 同步
  1. 在 SQL Server Management Studio 的对象资源管理器中,展开“(本地)”计算机节点。

  2. 右键单击“复制”文件夹,然后选择“配置 Web 同步”。

  3. 在该向导的简介屏幕上,单击“下一步”。

  4. 在“订阅服务器类型”屏幕上,选择“SQL Server Mobile Edition”,然后单击“下一步”。

  5. 在“Web 服务器”屏幕的“运行 IIS 的计算机”文本框中,键入您计算机的名称(如果尚未提供),然后单击“创建新的虚拟目录”。

  6. 在显示的树中,展开该计算机,展开“网站”,然后选择“默认网站”。

  7. 单击“下一步”。

  8. 在“虚拟目录信息”屏幕上的“别名”文本框中,键入 SQLMobile,然后单击“下一步”。

  9. 在“客户端身份验证”屏幕上,选择“客户端将以匿名方式进行连接”,然后单击“下一步”。

  10. 在“匿名访问”屏幕上,单击“下一步”接受默认设置。

  11. 在“快照共享访问”屏幕上,键入 \\computer\snapshot(其中 computer 是您计算机的名称),然后单击“下一步”。

    如果收到快照共享为空的警告,请单击“是”。

  12. 单击“Finish”。

  13. 单击“关闭”。

SQLServer Mobile 任务

在部署将要使用 SQL Server Mobile 的应用程序之前,预先创建 SQL Server Mobile 数据库和订阅通常会节省时间。SQL Server Management Studio 允许您在本地计算机上创建并使用 SQL Server Mobile 数据库。然后,您可以在开发应用程序时使用此数据库。

创建新的 SQLServer Mobile 数据库
  1. 在 SQL Server Management Studio 的对象资源管理器中,单击“连接”,然后选择“SQL Server Mobile”。

  2. 在“数据库文件”字段中,选择“<新建数据库…>”。

  3. 在文件名文本框中,键入 c:\sqlmobile.sdf,然后单击“确定”。

  4. 在“连接到服务器”对话框中,单击“连接”。

    将在对象资源管理器中添加名为“SQL Server Mobile [My Computer\...\sqlmobile]”的新节点。

创建新的订阅
  1. 在对象资源管理器中,展开“SQL Server Mobile”节点,展开“复制”,右键单击“订阅”,然后选择“新建订阅”。

  2. 在简介屏幕上,单击“下一步”。

  3. 在“选择发布”屏幕的“发布服务器”下拉列表中,选择“<查找 SQL Server 发布服务器…>”。

  4. 在“连接到服务器”对话框,键入或选择本地计算机,然后单击“连接”。

  5. 在“选择发布”屏幕的发布列表中,展开“SQLMobile”,选择“SQLMobile”发布,然后单击“下一步”。

  6. 在“标识订阅”屏幕上,为订阅名称键入 SQLMobile,然后单击“下一步”。

  7. 在“Web 服务器身份验证”屏幕上,键入前面过程中创建的虚拟目录的 URL。在此演练中,您已经创建了 URL 为 http://localhost/SQLMobile 的虚拟目录。

  8. 单击“订阅服务器将以匿名方式进行连接”,然后单击“下一步”。

  9. 在“SQL Server 身份验证”屏幕上,单击“下一步”接受默认设置。

    在最终屏幕上,该向导将显示示例代码,您可以在应用程序中创建订阅时使用该代码。选择示例代码(Visual Basic 或 C#,取决于您在创建应用程序时使用的语言),然后复制代码。若要执行复制操作,请选择该代码并按 Ctrl+C。启动记事本或其他文本编辑器,然后粘贴示例代码。在使用下列步骤创建应用程序时,您将使用此代码。

  10. 在复制示例代码之后,单击“完成”。

  11. 单击“关闭”。

生成应用程序
创建新的智能设备项目
  1. 打开 Visual Studio 2005。

  2. 在“文件”菜单上,选择“新建项目”。

  3. 在“新建项目”对话框的“项目类型”树中,展开您所使用的开发语言,然后选择“智能设备”。

  4. 在模板列表中,选择要创建的项目类型。对于此演练,请选择“Pocket PC 2003 应用程序”。

  5. 为该项目提供名称和位置,然后单击“确定”。对于此演练,请将该项目命名为 SQLMobile。

    Visual Studio 将创建新的项目,并显示 Form1,就像在智能设备上显示时一样。

添加对 System.Data.SqlServerCe.dll 的引用
  1. 在解决方案资源管理器中,右键单击“引用”,然后选择“添加引用”。

    注意:
    如果解决方案资源管理器中没有列出“引用”文件夹,那么单击解决方案资源管理器顶部的“显示所有文件”。

     

     

  2. 在 .NET 程序集列表中,选择“System.Data.SqlServerCe”,然后单击“确定”。如果没有列出 System.Data.SqlServerCe,请执行下列步骤:

    1. 单击“浏览”选项卡。
    2. 定位到以下目录:
      C:\Program Files\Microsoft Visual Studio 8\Common7\IDE
    3. 选择“System.Data.SqlServerCe.dll”,然后单击“确定”。

    解决方案资源管理器中的引用列表现在包括 System.Data.SqlServerCe,并且您的项目可以使用该程序集。

  3. 在解决方案资源管理器中,右键单击“Form1.cs”或“Form1.vb”,然后选择“查看代码”。

  4. 在窗体的代码顶部,添加指令以使用 System.Data.SqlServerCe 命名空间:

    [C#]

    using System.Data.SqlServerCe;

    [VB]

    Imports System.Data.SqlServerCe
添加数据连接
  1. 在主窗口中,切换回 Form1 的“设计”(默认)视图。

  2. 从“数据”菜单中,单击“添加新数据源”。

    注意   如果未显示“添加新数据源”,请选择 Form1 的“设计”视图,然后再次查看“数据”菜单。

  3. 在“选择数据源类型”窗口上,选择“数据库”,然后单击“下一步”。

  4. 在“选择您的数据连接”对话框中,单击“新建连接”。

  5. 在“选择数据源”对话框中的“数据源”下,选择“Microsoft SQL Server Mobile Edition”。在数据访问接口列表中,选择“.NET Framework Data Provider for SQL Server Mobile Edition”。单击“继续”。

  6. 在“添加连接”中的“数据源”下,选择“我的电脑”。

    在“连接属性”部分中的“数据库”下,单击“浏览”,然后浏览到前面过程中所创建的数据库。如果按照步骤操作,该数据库位于 c:\sqlmobile.sdf。

  7. 单击“测试连接”,然后单击“确定”以创建新的数据连接。

  8. 在“选择您的数据连接”对话框中,单击“下一步”。

  9. 在“保存连接字符串”窗口中,单击“下一步”。

  10. 在“选择您的数据库对象”窗口中,选择“表”,然后单击“完成”。

选择要显示的数据
  1. 从“数据”菜单中,选择“显示数据源”。

  2. 将“MembershipData”表从“数据源”窗口拖动到“Form1 设计”窗口。将在 Form1 上创建数据网格,并自动提供列名称。

  3. 右键单击数据网格,然后选择“属性”。

  4. 在“属性”窗口中,将“停靠”值更改为“顶部”。可以通过单击出现的图形表示的顶部栏,或者在值字段中键入“顶部”来完成此操作。将会对数据网格进行移动并调整其大小以填充 Form1 的顶部。

  5. 在数据网格的右上角,单击小箭头。从显示的菜单中,选择“生成数据窗体”。

  6. 将“FlightData”表从“数据源”窗口拖动到“Form1 设计”窗口。将在 Form1 上创建数据网格,并自动提供列名称。

  7. 您可以使用该数据网格的“属性”设置将“停靠”属性设置为“底部”。

添加代码

在应用程序的代码页中,您可以添加包含数据库文件的路径和名称的字符串变量,添加代码以便在数据库文件已存在时删除该文件,还可以添加代码以建立与 SQL Server 发布的连接、同步数据以及利用这些数据创建新的本地数据库。

添加代码
  1. 在解决方案资源管理器中,右键单击“Form1”,然后选择“显示代码”。

  2. 在代码页中,找到 Form1 的类定义。添加一个字符串变量,并为其分配该 .sdf 文件的路径和名称。Visual Studio 在上文中步骤创建的数据源将该数据库文件的存储位置设为 \Program Files\ApplicationName 文件夹,其中 ApplicationName 是应用程序的名称。例如,如果您将新项目命名为 SQLMobile,您的字符串变量应设置为 "\Program Files\SQLMobile\sqlmobile.sdf"

  3. 您的类定义的前几行应与以下代码类似:

    [C#]

    public partial class Form1 : System.Windows.Forms.Form
        {
        private System.Windows.Forms.MainMenu mainMenu1;
        string filename = @"\Program Files\SSMWalkthrough\sqlmobile.sdf";
        public Form1()
        {
        InitializeComponent();
        }

    [Visual Basic]

    Public Class Form1
        Dim filename As New String _
        ("\Program Files\SQMWalkthrough_vb\sqlmobile.sdf")
        
  4. 创建一个新方法,以便在数据库文件存在时删除该文件。这将确保应用程序每次运行时都加载最新的数据。该方法应命名为 DeleteDB。您的代码应与以下代码类似:

    [C#]

    private void DeleteDB()
        {
        if (System.IO.File.Exists(filename))
        {
        System.IO.File.Delete(filename);
        }
        }

    [Visual Basic]

    Sub DeleteDB()
        If System.IO.File.Exists(filename) Then
        System.IO.File.Delete(filename)
        End If
        End Sub
  5. 创建名为“Sync”的执行同步的新方法。若要执行此操作,您将使用从前面步骤的“新建发布向导”中复制的代码。在粘贴代码后,必须对代码执行两项更改:

    1. 更改 SubscriberConnectionString 值以指向在文件名变量中指定的正确路径和文件名。
    2. 将 AddOption 值从 ExistingDatabase 更改为 CreateDatabase。
      完成后,Sync 方法应如下所示:
      [C#]
      private void Sync()
              {
              SqlCeReplication repl = new SqlCeReplication();
              repl.InternetUrl = @"http://computer_name/sqlmobile/sqlcesa30.dll";
              repl.Publisher = @"computer_name";
              repl.PublisherDatabase = @"SQLMobile";
              repl.PublisherSecurityMode = SecurityType.NTAuthentication;
              repl.Publication = @"SQLMobile";
              repl.Subscriber = @"sqlmobile";
              repl.SubscriberConnectionString = @"Data Source='" + filename +
              "';Password='';Max Database Size='128';Default Lock Escalation
              ='100';";
              repl.AddSubscription(AddOption.CreateDatabase);
              repl.Synchronize();
              }
      [Visual Basic]
      Sub Sync()
              Dim repl As New SqlCeReplication()
              repl.InternetUrl = "http://computer_name/sqlmobile/sqlcesa30.dll"
              repl.Publisher = "computer_name"
              repl.PublisherDatabase = "SQLMobile"
              repl.PublisherSecurityMode = SecurityType.NTAuthentication
              repl.Publication = "SQLMobile"
              repl.Subscriber = "sqlmobile"
              repl.SubscriberConnectionString = _
              "Data Source='" + filename + "';Password='';" _
              & "Max Database Size='128';Default Lock Escalation ='100';"
              repl.AddSubscription(AddOption.CreateDatabase)
              repl.Synchronize()
              End Sub
  6. 最后,向调用刚才所创建两个方法的 Form1_Load 事件处理程序的开头添加代码。Form1_Load 事件处理程序应如下所示:

    [C#]

    private void Form1_Load(object sender, EventArgs e)
        {
        DeleteDB();
        Sync();
        // TODO: Delete this line of code ...
        this.flightDataTableAdapter.Fill(this.sqlmobileDataSet.FlightData);
        // TODO: Delete this line of code ...
        this.membershipDataTableAdapter.Fill(this.sqlmobileDataSet.MembershipData);
        }

    [Visual Basic]

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        DeleteDB()
        Sync()
        'TODO: Delete this line of code ...
        Me.FlightDataTableAdapter.Fill(Me.SqlmobileDataSet.FlightData)
        'TODO: Delete this line of code ...
        Me.MembershipDataTableAdapter.Fill(Me.SqlmobileDataSet.MembershipData)
        End Sub
        
部署并测试应用程序
部署应用程序
  1. 从“调试”菜单中,选择“开始”。

  2. 在“部署”对话框中,选择“Pocket PC 2003 SE 模拟器”,然后单击“部署”。

  3. 将会在新窗口中打开模拟器。在首次将应用程序部署到模拟器时,将安装 .NET Compact Framework 和 SQL Server Mobile。该过程可能需要几分钟的时间。当它们安装完成后,将安装您的应用程序并运行。

    您的应用程序将加载并显示这两个数据网格。单击“MembershipData”数据网格中的值时,会自动更新“FlightData”数据网格中的数据。

  4. 关闭应用程序,在 Visual Studio 中的“调试”菜单上,单击“停止调试”。

posted @ 2006-09-11 15:21  sunney  阅读(926)  评论(1编辑  收藏  举报