最近发布的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)中使用。下图显示了一个移动平台的构成体系。
这个平台允许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等控件:
在form第一次运行的时候,首先需要核查Pocket PC是否有包含书店信息的数据库,如果没有,那么就要用SQL Server CE引擎对象创建数据库。由于需要与SQL Server CE建立连接,所以必须使用SQL Server CE Managed Provider,因此第一件事情是引用System.Data.SqlServerCe.dll配置和输入相关的名称空间。
Imports System.Data.SqlServerCe
建立数据库后,就需要创建表,操作表就必须熟悉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中输入了两条纪录。
下一步使用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控件就填充了书店列表。
当选中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将不会工作。
.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 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中输入了两条纪录。
图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将不会工作。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-126708/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10294527/viewspace-126708/