Pocket PC应用程序中使用SQL Server CE(转)

最近发布的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)中使用。下图显示了一个移动平台的构成体系。

20051221164516821.jpg

图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等控件:

20051221164516300.jpg

图2


在form第一次运行的时候,首先需要核查Pocket PC是否有包含书店信息的数据库,如果没有,那么就要用SQL Server CE引擎对象创建数据库。由于需要与SQL Server CE建立连接,所以必须使用SQL Server CE Managed Provider,因此第一件事情是引用System.Data.SqlServerCe.dll配置和输入相关的名称空间。

Imports System.Data.SqlServerCe

20051221164517217.jpg

图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 DocumentsBookStores.sdf")
Dim ds As DataSet
'------------------------------------------
Sub createStoreDB()
' if database does not exist, create one
If Not File.Exists( _
"My DocumentsBookStores.sdf") Then
Dim sqlEngine As New Engine( _
"Data Source=" & _
"My DocumentsBookStores.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中输入了两条纪录。

20051221164519377.jpg

图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控件就填充了书店列表。

20051221164519934.jpg

图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将不会工作。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-126708/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10294527/viewspace-126708/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值