Pocket PC应用程序中使用SQL Server CE |
| 作者:chinabyte 来源:chinabyte.com 发布时间:2005-12-21 16:45:39 |
|
最近发布的Microsoft .NET Compact Framework beta1版包括了SQL Server CE2.0,SQL Server CE将SQL Server 2000扩展到windows CE环境中,同时它提供了与桌面应用程序开发相似的的开发环境。在这篇文章中我将初步介绍SQL CE 以及如何利用Smart Device Extension开发Pocket PC上的应用程序。 .NET Compact Framework体系结构 .NET Compact Framework(CF)是.NET Framework的子集,他最主要的优点是与.net类库具有相同的灵活性。但是所有.NET Framework的类和方法均能在.NET Compact Framework(CF)中使用。下图显示了一个移动平台的构成体系。 ![]() 图1 这个平台允许Windows CE自携带的应用程序与基于.net的应用程序共存。应用程序的宿主(本身也是一个应用程序)用一个公共运行时语言(CRL Common Language Runtime)的实例来管理代码。通过SDE利用.NET Compact Framework类库在CRL的顶端开发应用程序。 构造一个应用程序样本实例 在这个样本实例中将揭示.NET CF Pocket PC程序设计中要注意的几个方面。我将解释在.NET CF中怎样使用Web Service,怎样使用各种空件,以及怎样构件SQL Server CE数据库。这是一个书店的例子,例子中书店的售货员使用Pocket PC进行查询(在Web Sevice中),并在书店中下订单,这个订单将被提交给本地的SQL Server CE数据库。 Web Sevice Web Sevice将使用SQL Server2000中携带的Pubs数据库,这样你就可以很容易的在自己的机器上测试代码。 getTitles(): Imports System Imports System.Data Imports System.Data.SqlClient Imports System.Web.Services Public Class Service1 : Inherits WebService _ Public Function getTitles( _ ByVal title As String) As DataSet ' Make the database connection. Dim conn As New SqlConnection( _ "server=localhost; uid=sa;" & _ "password=; database=Pubs") ' Create the SQL and set the parameter. Dim sql As String = "SELECT * FROM " & _ "titles WHERE title LIKE @title" Dim comm As New SqlCommand(sql, conn) comm.Parameters.Add("@title", _ "%" & title & "%") ' Create a data adapter and data set. Dim dataAdapter As New SqlDataAdapter(comm) Dim ds As New DataSet() ' Fill the data set with the query results. conn.Open() dataAdapter.Fill(ds, "titles") conn.Close() ' Return the dataset. Return ds End Function End Class getTitles()方法获得查询字符串作为输入参数,同时返回数据集。 使用 Visual Studio .NET中的 Smart Device Extension (SDE) 在建立Web Sevice后,我们继续用SDE创建Pocket PC的应用程序。我们要开发的这个Pocket PC应用程序由一个tab控件和两个tab页组成,第一个tab页允许售货员通过书店搜索书籍并向书店下订单,第二个tab页则显示书店的订单。图2显示了程序重要使用的各种控件,这些控件有:label,textbox,button,combox,listbox和tab等控件: ![]() 图2 在form第一次运行的时候,首先需要核查Pocket PC是否有包含书店信息的数据库,如果没有,那么就要用SQL Server CE引擎对象创建数据库。由于需要与SQL Server CE建立连接,所以必须使用SQL Server CE Managed Provider,因此第一件事情是引用System.Data.SqlServerCe.dll配置和输入相关的名称空间。 Imports System.Data.SqlServerCe ![]() 图3 建立数据库后,就需要创建表,操作表就必须熟悉ADO.NET类库,在这个例子中我们将在SQL Server CE Managed Provider使用类: SqlCeConnection 和 SqlCeCommand类。 '-----conn and ds are defined globally----- Dim conn As New SqlCeConnection( _ "Provider=Microsoft.SQLServer.OLEDB.CE.1.0;" & _ "Data Source=\My Documents\BookStores.sdf") Dim ds As DataSet '------------------------------------------ Sub createStoreDB() ' if database does not exist, create one If Not File.Exists( _ "\My Documents\BookStores.sdf") Then Dim sqlEngine As New Engine( _ "Data Source=" & _ "\My Documents\BookStores.sdf") sqlEngine.CreateDatabase() Dim cmd As New SqlCeCommand( _ "CREATE TABLE Stores(storeID int " & _ "Primary Key NOT NULL, " & _ "storeName nvarchar(20))", conn) conn.Open() cmd.ExecuteNonQuery() cmd.CommandText = _ "CREATE TABLE Orders(storeID int, " & _ "title_id nvarchar(20), qty int)" cmd.ExecuteNonQuery() cmd.CommandText = _ "INSERT INTO Stores (storeID, " & _ "storeName) VALUES (1, " & _ "'Great BookStore')" cmd.ExecuteNonQuery() cmd.CommandText = _ "INSERT INTO Stores (storeID, " & _ "storeName) VALUES (2, " & _ "'Computer BookStore')" cmd.ExecuteNonQuery() conn.Close() End If End Sub 在上面的代码中我们创建了两个表:Orders和Store。Orders存储来自售货员的订单,Stores存储书店的库存,出于方便我已经在Stores中输入了两条纪录。 ![]() 图4 下一步使用SqlCeDataReader类将书店列表价载入ComboBox控件中。 Sub LoadStores() conn.Open() Dim reader As SqlCeDataReader Dim cmd As New SqlCeCommand( _ "SELECT * FROM Stores", conn) reader = cmd.ExecuteReader While reader.Read cboStoreID.Items.Add( _ reader.Item("storeID")) End While conn.Close() End Sub 这样当表单被载入时,ComboBox控件就填充了书店列表。 ![]() 图5 当选中Store ID时,就显示他代表的 Private Sub cboStoreID_SelectedIndexChanged( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles cboStoreID.SelectedIndexChanged conn.Open() Dim sql As String = _ "SELECT * FROM Stores WHERE storeID=" & _ cboStoreID.Items(cboStoreID.SelectedIndex) Dim cmd As New SqlCeCommand(sql, conn) Dim reader As SqlCeDataReader = cmd.ExecuteReader reader.Read() lblStoreName.Text = reader.Item("storeName") conn.Close() End Sub 调用Web Sevice 对于特殊的书籍查询,应用程序将调用Web Sevice,在.NET CF中调用Web Sevice与在.NET Framework中没有什么差别,要注意的是Web Sevice必须与实际机器上使用的名称相同,否则Web Sevice将不会工作。 下面将Web Sevice与C |
| [] [返回上一页] [打 印] |
文章评论 |





