使用SQL CE为Pocket PC进行数据库应用程序编程






4.03/5 (19投票s)
本示例演示了如何编程 SQL CE 应用程序。它还展示了一种可以轻松修改和扩展以创建其他数据库应用程序的设计模式。
引言
本文是对继承数据访问层函数的后续,描述了一种快速结构化地构建 Pocket PC 2003 数据库应用程序的方法。
首先,为 Pocket PC 2003 创建一个智能设备应用程序。之后,您需要添加对 System.Data.Common
和 System.Data.SQLServerCE
的引用。
如何初始化数据库
要创建包含一些初始数据的数据库,首先要检查数据库文件是否存在。如果该文件不存在,则可以通过以下步骤创建数据库:
1. 创建数据库本身
REM Create Database
Dim SQLEngine As SqlServerCe.SqlCeEngine
SQLEngine = New SqlServerCe.SqlCeEngine("data source=" & DBPath)
SQLEngine.CreateDatabase()
要使用 SqlCeEngine.CreateDatabase
方法创建受密码保护的数据库,您必须在连接字符串中指定密码属性。例如:
"data source=\secure.sdf;password=<myPassword>;encrypt database=TRUE"
2. 生成一个 SQL 命令来创建您想要的表
REM Create an SQL command to create the database
SQL = "CREATE TABLE ADR_ADDRESS ( "
SQL &= "Address_ID INT IDENTITY(1,1) PRIMARY KEY "
SQL &= ",Name nvarchar(50) "
SQL &= ",Address ntext "
SQL &= ",Telephone ntext "
SQL &= ",Last_Edited datetime "
SQL &= ",IsPrivate_Flag nvarchar(10) "
SQL &= ")"
下表是对 SQL CE 中使用的数据类型的解释:
数据类型 |
描述 |
nchar(n) (国家字符(n)) |
固定长度的 Unicode 数据,最大长度为 255 个字符。 默认长度 = 1 存储大小(以字节为单位)是输入的字符数的两倍。 |
nvarchar(n) (国家可变字符(n)) |
可变长度的 Unicode 数据,长度从 1 到 255 个字符。 默认长度 = 1 存储大小(以字节为单位)是输入的字符数的两倍。 |
Ntext |
可变长度的 Unicode 数据,最大长度为 (2^30 - 2) / 2 (536,870,911) 个字符。存储大小(以字节为单位)是输入的字符数的两倍。 |
binary(n) |
固定长度的二进制数据,最大长度为 510 字节。默认长度 = 1 |
Varbinary(n) |
可变长度的二进制数据,最大长度为 510 字节。默认长度 = 1 |
Image |
可变长度的二进制数据,最大长度为 2^30 – 1 (1,073,741,823) 字节。 |
Uniqueidentifier |
全局唯一标识符 (GUID)。存储大小为 16 字节。 |
IDENTITY [(s, i)] s (seed) = 起始值 i (increment) = 增量值 |
这是数据列的属性,而不是一个独立的数据类型。 只有整数数据类型的列才能用作标识列。一个表只能有一个标识列。可以指定种子值和增量值,并且不能更新该列。 |
ROWGUIDCOL |
这是数据列的属性,而不是一个独立的数据类型。它是表中一个使用 uniqueidentifier 数据类型定义的列。一个表只能有一个 ROWGUIDCOL 列。 |
3. 执行 SQL 命令
Dim objConn As New SqlCeConnection
objConn.ConnectionString = ConnStr
objConn.Open()
Dim objCmd As SqlCeCommand = New SqlCeCommand(SQL, objConn)
objCmd.CommandType = CommandType.Text
objCmd.ExecuteNonQuery()
bjCmd.Dispose()
最后一步是填充该表的数据。为此,我在项目中包含了 Adr_Address.xml
。部署后,该文件将找到其在程序目录中的位置。可以通过以下代码定位:
StartupPath = "/Program Files/" +
System.Reflection.Assembly.GetExecutingAssembly.GetName.Name
通过 DBTable.vb 中的 ImportXML
函数读取此文件并将其插入数据库。
CRUD:使用 SQLCE 进行创建、读取、更新和删除
创建、更新和删除功能可以使用不返回值的 SQL 语句来实现。因此,这些功能可以按照步骤 2 和 3 中所述的方式创建。
要从数据库读取,可以使用以下代码:
Dim objConn As New SqlCeConnection
objConn.ConnectionString = ConnStr
objConn.Open()
Dim SQL as string = “select * from adr_address”
Dim objCmd As New SqlCeDataAdapter(SQL, objConn)
Dim ds As DataSet = New DataSet
REM Fill Table held in ClassName in the Dataset ds
objCmd.Fill(ds, ClassName)
objCmd.Dispose()
在构建更复杂的 SQL 语句时,Access 和 SQL CE 之间与本示例相关的主要区别如下:
1. 要使用日期时间函数,可以使用:
在 Access 中
TestDate = #01 MAR 2002 13:12:45#
在 SQLCE 中
TestDate (datetime,' 01 MAR 2002 13:12:45:000')
2. SQL CE 没有布尔类型。这意味着您必须自己定义一个。我更喜欢使用字符串 'True'
和 'False'
,但它们也可以很容易地定义为整数或 'T'
和 'F'
。
在 Access 中
TestBoolean = True
在 SQL CE 中
TestBoolean = ‘True’
3 层 SQLCE Pocket PC 示例
在示例中,所有这些都已通过继承数据访问层函数中描述的继承方法实现。这可能不适合所有人,但我非常喜欢这种方法,因为它已被证明是开发可维护的、结构良好的应用程序的非常快速的方法。在示例中,我还包含了 XMLTable
,它类似于 DBTable
。其理念是,我使用与读取任何其他数据库相同的接口来读取 XML 文件,从而可以轻松地将数据库从 XML 更改为其他类型。
下面的 ERD 概述了我在示例中链接类的关系。
最后要记住的一点是,对话框左上角的“x”在 Windows 应用程序中的处理方式与此不同。这是因为否则将难以在应用程序之间切换。因此,如果您想关闭一个对话框,需要执行 me.close
。
结论
这是开始创建数据库应用程序的一个良好起点。它演示了使独立数据库应用程序正常工作的基本问题。当我有时间时,我将写一篇后续文章,介绍如何将数据与其他平台上的数据同步。