如何使用SQL Server Compact Edition创建移动应用程序
创建新的订阅
在对象资源管理器中,展开“SQL Server Compact” Edition节点,展开“复制”,右键单击“订阅”,然后选择“新建订阅”。
在简介屏幕上,单击“下一步”。
在“选择发布”屏幕的“发布服务器”下拉列表中,选择“<查找 SQL Server 发布服务器…>”。
在“连接到服务器”对话框中,键入或选择本地计算机名称,然后单击“连接”。
在“选择发布”屏幕的发布列表中,展开“SQLMobile”,选择“SQLMobile”发布,然后单击“下一步”。
在“标识订阅”屏幕上,为订阅名称键入 SQLMobile,然后单击“下一步”。
在“Web 服务器身份验证”屏幕上,键入前面过程中创建的虚拟目录的 URL。在此演练中,您已经创建了 URL 为 http://localhost/SQLMobile 的虚拟目录。
单击“订阅服务器将以匿名方式进行连接”,然后单击“下一步”。
在“SQL Server 身份验证”屏幕上,单击“下一步”接受默认设置。
在最终屏幕上,该向导将显示示例代码,您可以在应用程序中创建订阅时使用该代码。选择示例代码(Visual Basic 或 C#,取决于您在创建应用程序时使用的语言),然后复制代码。若要执行复制操作,请选择该代码并按 Ctrl+C,启动记事本或其他文本编辑器,然后粘贴该示例代码。在使用下列步骤创建应用程序时,您将使用此代码。
在复制示例代码之后,单击“完成”。
单击“关闭”。
生成应用程序
创建新的智能设备项目
打开 Visual Studio 2005。
在“文件”菜单上,选择“新建项目”。
在“新建项目”对话框的“项目类型”树中,展开您所使用的开发语言,然后选择“智能设备”。
在模板列表中,选择要创建的项目类型。对于此演练,请选择“Pocket PC 2003 应用程序”。
为该项目提供名称和位置,然后单击“确定”。对于此演练,请将该项目命名为 SQLMobile。
Visual Studio 将创建新的项目,并显示 Form1,这类似于在智能设备上进行显示。
添加引用
1、在解决方案资源管理器中,右键单击“引用”,然后选择“添加引用”。
注意:如果解决方案资源管理器中没有列出“引用”文件夹,那么单击解决方案资源管理器顶部的“显示所有文件”。
2、在 .NET 程序集列表中,选择“System.Data.SqlServerCe”,然后单击“确定”。如果没有列出 System.Data.SqlServerCe,请执行下列步骤:
单击“浏览”选项卡。
定位到以下目录:C:\Program Files\Microsoft Visual Studio 8\Common7\IDE
选择“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 |
添加数据连接
在主窗口中,切换回 Form1 的“设计”(默认)视图。
从“数据”菜单中,单击“添加新数据源”。
注意 如果未显示“添加新数据源”,请选择 Form1 的“设计”视图,然后再次查看“数据”菜单。
在“选择数据源类型”窗口上,选择“数据库”,然后单击“下一步”。
在“选择您的数据连接”对话框中,单击“新建连接”。
如果显示“添加连接”对话框,请单击“更改”。
在“选择数据源”对话框的“数据源”中,选择“Microsoft SQL Server Compact Edition”(如果连接已存在,则此对话框的名称可能为“更改数据源”)。在数据访问接口列表中,选择“.NET Framework Data Provider for SQL Server Compact Edition”。单击“继续”或“确定”。
在“添加连接”对话框的“数据源”中,选择“我的电脑”。
在“连接属性”部分的“数据库”中,单击“浏览”,然后浏览到前面过程中创建的数据库。如果按照步骤操作,该数据库位于 c:\sqlmobile.sdf。
单击“测试连接”,然后单击“确定”以创建新的数据连接。
在“选择您的数据连接”对话框中,单击“下一步”。
如果此时出现对话框,要求您将数据文件复制到当前项目中,请单击“是”。
在“保存连接字符串”窗口中,单击“下一步”。
在“选择您的数据库对象”窗口中,选择“表”,然后单击“完成”。
选择要显示的数据
从“数据”菜单中,选择“显示数据源”。
将“MembershipData”表从“数据源”窗口拖动到“Form1 设计”窗口。将在 Form1 上创建数据网格,并自动提供列名称。
右键单击数据网格,然后单击“属性”。
在“属性”窗口中,将“停靠”值更改为“顶部”。可以通过单击出现的图形表示的顶部栏,或者在值字段中键入“顶部”来完成此操作。将会对数据网格进行移动并调整其大小以填充 Form1 的顶部。
在数据网格的右上角,单击小箭头。从显示的菜单中,选择“生成数据窗体”。
将“FlightData”表从“数据源”窗口拖动到“Form1 设计”窗口。将在 Form1 上创建数据网格,并自动提供列名称。
您可以使用该数据网格的“属性”设置将“停靠”属性设置为“底部”。
添加节点
在应用程序的代码页中,可添加包含数据库文件的路径和名称的字符串变量、用于删除数据库文件(如果已存在)的代码、用于创建与 SQL Server 发布的连接、同步数据和创建一个包含已发布数据的新本地数据库的代码。
添加代码
在解决方案资源管理器中,右键单击“Form1”,然后选择“查看代码”。
在代码页中,查找 Form1 的类定义。添加一个字符串变量,并赋值为 .sdf 文件的路径和文件名。Visual Studio 在先前步骤中创建的数据源需要数据库文件驻留在 \Program Files\ApplicationName 文件夹中,其中 ApplicationName 为应用程序的名称。例如,如果您命名了新项目 SQLMobile,则应将字符串变量设置为 "\Program Files\SQLMobile\sqlmobile.sdf"。
类定义的前几行应该与以下代码类似:
[C#]
以下是引用片段: public partial class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.MainMenu mainMenu1; string filename = @"\Program Files\SQLMobile\sqlmobile.sdf"; public Form1() { InitializeComponent(); } |
[Visual Basic]
以下是引用片段: Public Class Form1 Dim filename As New String _ ("\Program Files\SQLMobile\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”的执行同步的新方法。若要执行此操作,您将使用从前面步骤的“新建发布向导”中复制的代码。在粘贴代码后,必须对代码执行两项更改:
a.更改 SubscriberConnectionString 值,以便该值指向文件名变量中指定的正确路径和文件名。
b.将 AddOption 值从 ExistingDatabase 更改为 CreateDatabase。
更改完成后,Sync 方法应如下所示:
[C#]
以下是引用片段: private void Sync() { SqlCeReplication repl = new SqlCeReplication(); repl.InternetUrl = @"http:///sqlmobile/sqlcesa30.dll"; repl.Publisher = @""; 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';"; try { repl.AddSubscription(AddOption. CreateDatabase); repl.Synchronize(); } catch (SqlCeException e) { MessageBox.Show(e.ToString()); } } |
[Visual Basic]
以下是引用片段: 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 |
部署应用程序
从“调试”菜单中,选择“启动调试”。
如果此时显示“部署”对话框,请选择“Pocket PC 2003 SE 仿真程序”,然后单击“部署”。
此时,将会在新窗口中打开该仿真程序。在首次将应用程序部署到该仿真程序时,将安装 .NET Compact Framework 和 SQL Server Compact Edition。该过程可能需要几分钟的时间。当它们安装完成后,将安装您的应用程序并运行。
您的应用程序将加载并显示这两个数据网格。单击“MembershipData”数据网格中的值时,会自动更新“FlightData”数据网格中的数据。
关闭该应用程序,并在 Visual Studio 的“调试”菜单上,单击“停止调试”。
本文由翔宇亭IT乐园(http://www.biye5u.com)提供,有什么意见或建议请留言评论。
微信搜索“优雅的代码”关注本站的公众号,或直接使用微信扫描下面二维码关注本站公众号,以获取最新内容。
个人成长离不开各位的关注,你的关注就是我继续前行的动力。