Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33647
  • 博文数量: 17
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 180
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-02 12:04
文章分类
文章存档

2011年(1)

2010年(6)

2008年(10)

我的朋友
最近访客

分类: WINDOWS

2010-02-25 14:43:47

ADOCE(Active Data Object for Windows CE)技术提供了高层数据库应用软件的访问接口, ADOCE是一种易用的COM组件,关于COM组件的开发与调用在《ARM9工控板在远程监控中的应用》系列文章中有详细的说明。在eVC环境数据库开发请参考英创公司网站站内文章《使用ADOCE开发SQLCE数据库》。

当今,工业控制系统的网络化、标准化一直是业界比较关注的课题,对于大型的工业现场,由于被控对象、测控装置等设备的地域分散性,以及控制任务的实时性要求,大多数控制设备还停留在单点本地通信,其作用距离短,无法实现与企业信息网络的相互融合。随着计算机、网络通信和Internet技术的飞速发展和不断进步,嵌入式系统在家庭和工业等多个领域得到越来越广泛的应用。

基于WebBS模式的远程监控技术具有非常重要的特点:即只要是有Internet接入的地方,用户就可以通过Internet登录服务器,对现场设备群进行远程监控和管理。本文主要讲解通过ADOCE技术完成数据库的操作。为了实现远程监控的控制功能,例如控制启动AD的采集、控制继电器等,我们可以通过编写COM组件来完成。嵌入式系统把工业线程的信息收集后,数据存储在SQLCE数据库中,通过Web网页访问和修改数据库,可以观察到现场的状况。SQLCE数据还有一个优点是,能与SQL Server 2000数据同步,这样,可以完成多个嵌入式设备数据共享功能。通过ASP访问SQLCE的原理框图如图1所示。

1 ASP访问SQLCE的原理框图

在阅读本文章之前,应该了解HTMLASP网页的基本语法。本文不对HTML语法做介绍。

ADOCE结构之下,提供了几种对象供程序设计人员应用。它们分别是:

· Connection对象

· Recordset对象

· Command对象

· Error对象

下面结合实例对其分别说明

一、Connection对象

<% Set Conn=Server.CreateObject(“ADOCE.Connection.3.1”)%>

在这条语句执行之后,实际上尚未连接到任何数据库系统,只能说完成数据库连接前的定义工作。

conn.Open ""Provider={SQL Server}; data source=数据库名称;Server=服务器IP;UID=帐号;PWD=密码"

例如打开\NandFlash\Emtronix.sdf数据库代码如下:

const m_strDataSource = "Provider = Microsoft.SQLSERVER.OLEDB.CE.2.0; data source = \NandFlash\emtronix.sdf"

conn.Open  m_strDataSource                                      '打开数据库

二、Recordset对象

Recordset对象的属性如表1所示。

1 Recordest对象的属性说明

属   性

说   明

AbsolutePage

设置当前记录所在位置是第几页

AbsolutePosition

设置记录集对象所在位置是第几条记录

ActiveConnection

设置记录集属于哪一个Connection对象

BOF

检验当前记录集对象所指位置是否在第一条记录之前,若成立,则返回True,否则返回False

EOF

检验当前记录集对象所指位置是否在最后一条记录之后。若成立,则返回True,否则返回False

CacheSize

设置记录集对象在内存中缓存的记录数

Cousor

设置记录集对象的光标类型,共分为四种,分别为DynamicStaticForward-onlyKeyset

EditMode

指定当前是否处于编辑模式

LockType

在记录集的当前位置锁定记录

PageSize

设置记录集对象一页所容纳的记录数

PageCount

显示记录集当前的页面总数

Recordset对象的方法如表2所示。

2  Recordset对象的方法

方   法

说   明

AddNew

添加一条空白记录

CancelBatch

取消一个批处理更新操作

CancelUpdate

取消已存在的和新的记录所做的任何改变

Close

关闭打开的记录集

GetRows

取得记录集的多条记录

Movefirst

RS记录集对象的指针移至记录集对象中最顶端的记录

Moveprevious

RS记录集对象的指针向上移动一条

Movenext

RS记录集对象的指针向下移动一条

Movelast

RS记录集对象的指针移至记录集对象中最底端的记录

Open

打开一个记录集

Requery

重新执行查询

Update

向数据库提交对一条记录的改变或添加

Fields.count

显示该记录集对象内所含有的字段数

Recordset对象可以创建一个记录集合,并且将所需的记录从表中取出,同时,使用虚拟表格的方式,每一行为一条记录,每一列则代表一个字段,提供给ASP程序处理。

Recordset对象在使用前同样需要使用Connection对象建立数据库的连接,其步骤如下所示:

1)创建Connection对象,打开数据源。

首先需要创建一个Connection对象,并保存在OBJConn变量中,然后打开数据源,程序代码如下所示:

Set conn = CreateObject("ADOCE.Connection.3.1")

const m_strDataSource = "Provider = Microsoft.SQLSERVER.OLEDB.CE.2.0; data source = \NandFlash\emtronix.sdf"

conn.Open m_strDataSource   '打开数据库

2)创建Recordset对象。

在取得与数据库的连接之后,接着即可创建Recordset对象,其程序代码如下所示:

Set rs = CreateObject("ADOCE.Recordset.3.1")

3)打开Recordset取得数据。

Recordset对象创建完成之后,即可打开Recordset对象的内容。此Recordset对象的内容是SQL查询语句,其命令如下所示:

strSQL = "select * from Products"

rs.open strSQL,conn    

4)处理Recordset对象的记录。

在打开Recordset对象的记录集合之后,即可开始使用Recordset对象的属性及方法,进行表的操作或取得当前的状态。例如:取得Recordset对象的状态属性State,如下所示:

If Rs.State = 1 Then

    Response.Write("Rs 对象目前处于打开的状态
")

Else

    Response.Write("Rs 对象目前处于关闭的状态
")

End If

上述程序代码是利用“If...Then...Else”语句的方式,检查状态属性State,查看当前Recordset对象的打开状态。如果返回值为“1”,则代表状态已打开,返回值为“0”则代表状态已关闭。

5)关闭Recordset对象。

Rs.Close

Set Rs = Nothing

在执行上述程序代码之后,将会关闭Recordset对象,并且由“Set Rs = Nothing”释放Recordset对象。

6)关闭与数据库的连接。

最后关闭数据库连接,OBJConn.CloseConnection对象的Close方法),如下所示:

OBJCConn.Close

set OBJConn = Nothing

三、取得字段名称与内容

Fields对象属于Recordset对象的Fields数据集合,其可以在ASP程序中取得字段的信息。常用属性如表3所示:

3  Fields的常用属性

   

Count

取得当前Recordset对象记录集合中的字段数量

Name

取得当前Recordset对象记录集合中的字段名称

Value

取得当前Recordset对象记录集合中的字段内容

Type

取得当前Recordset对象记录集合中,字段的数据类型

如果需要取得当前Recordset对象记录集合中的字段数量,可以采用如下的程序代码取得:

FieldCount = Rs.Fields.Count

在上述程序代码执行之后,将会取得当前Recordset对象记录集合中的字段数量。在取得字段数量之后,即可根据索引来取得字段的名称、数据类型、长度等信息。程序代码如下所示:

Rs.Fields(I).Name

Rs.Fields(I).Value

Rs.Fields(I).Type

Rs.Fields(I).Attributes

Rs.Fields(I).DefinedSize

上述程序的索引变量I是从“0”开始,增量为“1”,持续累加直到I为“FieldCount - 1为止,依次取得字段的相关信息。

Response.Write ""

      For I = 0 to FdCount – 1   以表格方式显示字段名

       Response.Write "" & rs.Fields(i).Name & ""

      next

 Response.Write ""

Response.Write ""

              Do While Not rs.Eof      以表格显示记录的内容

              Response.Write ""

             For I = 0 to FdCount - 1

           Response.Write "" & rs.Fields(i).Value & ""

           Next

            Response.Write ""

          Rs.MoveNext

 Loop

四、取得、移动记录指针

Recordset对象取得指定的记录之后,通常需要将记录指针移到相应记录上,也就是说,将表4的记录指针移到指定的记录上。Recordset对象的相关方法如下所示。

4  方法

方  法

MoveFirst

将记录指针移到第一条记录

MoveLast

将记录指针移到最后一条记录

MoveNext

将记录指针移到下一条记录

MovePrevious

将记录指针移到上一条记录

Recordset对象的数据集合产生之后,用户就可使用Recordset对象所提供的四种方法,在与查询条件相符的记录中,自由地移动记录指针。

五、添加、更新、删除记录

(1)添加记录

如果用户希望在数据库特定表中添加一条记录,则必须使用INSERT语句,以下是INSERT语句的语法:

INSERT INTO 表名 [(字段名称1 [, 字段名称2[, ...]])]

VALUES (数据1 [, 数据2 [, ...]])

在使用INSERT添加数据时必须注意以下几点:

·         表名后面括号内字段名称的排列顺序与VALUES后面括号内数据的排列顺序必须一致。否则进行数据添加时会发生添加失败。

·         未设置的字段,添加数据时其默认值为Null

·         添加的一条数据记录,在建立时就给予其默认值,而值是Null

dim strSQL,ProID,emName,emtype,emram,emflash,deleteID

ProID=request.Form("ProID")

emName=request.Form("emName")

emtype=request.Form("emType")

emram=request.Form("emRAM")

emflash=request.Form("emFlash")

deleteID=request.Form("DeleteID")

strSQL="insert into Products (编号,产品名称,CPU型号,RAM,Flash) VALUES ( " &ProID& " ,' " &emName& " ',' " &emtype& " ',' " &emram& " ',' " &emflash& " ') "

conn.execute  strSQL

在写SQL语句时,注意,以及三个符号的用法,在之间的内容表示是字符串,SQL语句中字段的值如果是字符串,需要用包括起来。&是连接符号,请仔细理解上面的语句,才不会出错。

(2)更新记录

更新数据使用UPDATE语句,基本语法如下:

UPDATE 表名

SET 字段1=数据1, 字段2=数据2,

WHERE 语句

strSQL="update Products set 编号=" &ProID& ",产品名称='" &emName& "',CPU型号='" &emtype& "',RAM='" &emram&"',Flash='" &emflash&"' where 编号="&ProID

conn.execute strSQL

关于, ‘ 在上面已经做了说明。

(3)删除记录

要在表中删除一条记录,必须使用DELETE语句,使用该语句必须特别注意,一旦数据被删除,将无法恢复。如果没有指定Where语句,将删除表中的所有记录。以下是DELETE语句的语法:

DELETE FROM 表名 WHERE 语句

strSQL = "delete  from Products where 编号=" &deleteID

conn.execute strSQL

六、综合测试

SqlceTest文件夹下的所有文件拷贝到\nandflash\www目录下,把Emtronix.sdf数据库拷贝到\nandflash根目录下,在pc端的IE浏览器中输入

板卡ip地址/nand/sqlcetest.asp,在浏览器中,显示如图2 所示。

 

 

2 IE浏览器中显示数据库的结果
阅读(1229) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~