资源描述
第七章 用ADO访问Web数据库
ADO(ActiveX Data Object,ActiveX数据对象)是ASP的一个ActiveX服务器组件(ActiveX Server Component),用于Web数据库的访问,可以把ADO与ASP结合起来,创建基于Web的数据库应用程序,对服务器端的数据库进行查询、插入、更新、删除等操作。
1. ADO基础
(1) 常见的ADO对象
对 象
说 明
Connection
建立数据源的连接
Recordset
用于操作数据表
Command
执行数据查询
Fields和Field集合
处理记录集中的各个列。
(2) Web数据库访问方法
2. Connection对象
功能:建立数据源连接。
常用属性
§ ConnectionString:数据库连接字符串,描述数据库的连接方式
常用方法
§ Open:打开数据库连接
§ Execute:执行指定的查询
§ Close:关闭数据库连接
Connection对象的使用
§ 创建Connection对象实例,例如:
<% Set Cnn=Server.CreateObject(ADODB.Connect) %>
§ 设置连接字符串ConnectionString,例如:
<% Cnn.ConnectionString=“Driver={Microsoft Access Driver(*.mdb)}; DBQ=d:\test\Users.mdb” %>
或
<% strConn= “Driver={Microsoft Access Driver(*.mdb)}; DBQ=d:\test\Users.mdb” %>
§ 用Open方法打开数据连接,例如:
<% Cnn.Open %>
或
<% Cnn.Open strConn %>
§ 用Close方法关闭数据库连接,例如:
<%
Cnn.close
Set Cnn=Nothing
%>
Open方法
§ 功能:打开数据库连接
§ 语法:
Connection实例.Open ConnectionString
Connection对象实例:是指用Server对象的CreateObject方法创建的连接对象实例名。
ConnectionString:是连接字符串,指明了连接的数据库的类型以及名称等。
Execute方法
§ 功能
运行SQL语句,实现数据查询,并将查询结果存储在RecordSet对象中。
§ 语法格式
不返回结果的命令
Connection.Execute CommandText,RecordsAffected,Option
返回结果的命令
Set RecordSet = Connection.Execute(CommandText,RecordsAffected,Option)
例如:Set rs = conn .Execute ("select * from sheet" )
§ 说明:用该方法形成的数据集指针只能向下移动,记录只能供读取,不能插入、修改数据。
Close方法
功能:关闭已打开的Connection对象,将应用程序与数据库连接断开。
例如:
objConn.close //关闭数据库连接
Set objConn=Nothing // 释放Connection对象实例所占的资源
3. Recordset对象
1)Recordset对象的常用属性
属性名
说 明
RecordCount
返回Recordset对象中有多少条记录。如果该属性无法判断记录总数,则返回-1。需要说明的是,如果Recordset对象所表示的记录集以adOpenForwardOnly方式打开,则RecordCount属性不起作用。
PageSize
当Recordset对象设置了分页时,使用PageSize属性设置每页的记录数。PageSize属性的缺省值为10,即每页有10条记录。
PageCount
指明当前Recordset对象所包含的页数。每一页包括一组记录,其记录的数量由PageSize属性设置。
AbsolutePage
返回当前记录所在页的绝对页号,也可以指定当前记录应该放置在哪页。
AbsolutePosition
返回当前记录指针的绝对位置。在正常情况下,其值在1到RecordCount(记录的个数)之间。在Recordset对象所表示的记录集内,第一条记录对应的AbsolutePosition值为1,最后一条记录的AbsolutePosition值为RecordCount。使用AbsolutePosition属性,可以将当前记录移动到指定的设置。例如:<% RS.AbsolutePosition=10 %>,这条命令将记录指针移动到第10条记录。
BOF
若指针位于第一条记录之前,返回True,否则返回False
EOF
若指针位于最后一条记录之后,返回True,否则返回False
§ CursorLocation属性:
设置记录的存放位置,取值如下表:
常 数
值
说 明
adUseServer
2
记录被下载到浏览器端
adUseClient
3
记录存放在服务器端
§ CursorType属性
设置指针在Recordset对象中的移动方向,取值如下表:
常 数
值
说 明
adOpenForwardOnly
0
默认值,指针只能下移。若对记录进行了新增、删除或更新,之前读取出的Recordset对象无法看到这些变化,仍保持着读取时的状态
adOpenKeyset
1
指针可上下移动。若对记录进行了新增、删除或更新,之前读取出的Recordset对象可看到更新的记录,但看不到新增或已删除的记录
adOpenDynsmic
2
指针可上下移动。若对记录进行了新增、删除或更新,之前读取出的Recordset对象可看到所有的改变
adOpenStatic
3
当CursorLocation=3时,取该值。此时,指针可上下移动,但看不到记录的任何修改
§ LockType属性
设置能否将记录写入表中,取值如下表:
常 数
值
说 明
adLockReadOnly
1
默认值,记录为只读属性,不允许任何修改
adLockPessimistic
2
当开始编辑某记录时,锁定该记录;待编辑完成并调用Update方法进行更新后,再解除锁定
adLockOptimistic
3
只有在调用Update方法进行更新的时候才锁定记录,若在编辑某记录后没有调用Update,而移动了记录指针,ADO会自动调用Update,若要取消更新,可以使用CancelUpdate方法。
adLockBatchOptimistic
4
允许以批处理方式更改记录
2)Recordset对象的常用方法
方法名
说 明
AddNew
对一个可更新的Recordset对象新增记录行。
Delete
删除一个打开的Recordset对象的当前记录。
Update
存储Recordset对象当前记录的任何变动。
CancelUpdate
当数据修改之后,但还没有调用Update之前,取消数据更新
open
打开并获取Recordset对象
Close
关闭一个已打开的Recordset对象
MovwFirst
将指针移到第一条记录
MoveLast
将指针移到最末一条记录
MoveNext
将指针下移一条记录
MovePrevious
将指针上移一条记录
Move Num
将指针下移Num条记录
4. FIELDS对象
RS.FIELDS.count // 获取字段数
RS.FIELDS(i).name // 获取字段名
RS.FIELDS(i).value // 获取字段值
5. Command对象
功能:向数据源发出执行查询、更新数据的命令。
常用属性
§ ActiveConnection
§ CommandText
§ CommandType
常用方法
§ Execute:执行指定的查询
Command对象的使用
§ 创建Command对象实例,例如:
<% Set cmd=Server.CreateObject(ADODB.Command) %>
§ 设置Connection动态连接,例如:
<% Set cmd.ActiveConnection = Cnn %>
§ 设置Command命令和类型,例如
<% strSQL=“select * from Users”
cmd.CommandText = strSQL
cmd.CommandType = adCmdText %>
§ 执行Command命令
<% cmd.Execute %>
6. 设计Web数据库应用程序步骤
1)创建数据库
可以在任意一种支持ODBC(OLE DB)的数据库管理系统中创建用户数据库。
字 段
字段名称
字段类型
字段宽度
留言者姓名
UserName
文本
8
Email地址
Email
文本
20
留言主题
Subject
文本
50
留言内容
Memo
备注
固定长度
留言时间
Time
日期
8
2)建立连接对象、打开数据库
§ Set conn = Server.CreateObject("ADODB.Connection")
§ conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("book.mdb")
或
§ Set Conn = Server.CreateObject("ADODB.Connection")
§ Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Server.MapPath("Friend.mdb")
§ Conn.Open
3)打开指定的数据表
用Connection的Execute打开数据表,并将数据存放储到RecordSet对象实例rs中:
Set rs = conn.Execute("sheet" )
或用Recordset的Open方法打开数据表:
§ Set rs = Server.CreateObject("ADODB.Recordset")
§ rs.Open "sheet", Conn, adOpenKeyset, adLockOptimistic, adCmdTable
4)操作数据表
用RecordSet对象的方法(或 SQL )对rs中的数据进行查询、删除、修改、插入等操作。
5)断开连接对象、关闭数据库、释放资源
rs.Close
conn.Close
Set rs=Nothing
Set conn=Nothing
7. 用Recordset对象操作数据库
§ 对Recordset对象的查询与浏览
对数据库进行查询与浏览的一般过程是:
Ø 为用户提供一个输入查询条件的界面,用户输入查询条件并提交给服务器端特定的.asp程序;
Ø 编写ASP程序对表单数据进行处理
ü 服务器端asp程序建立连接、打开数据库、执行查询语句,将满足条件的记录存储在RecordSet对象中;
ü 利用RecordSet对象的相关属性和方法浏览数据;
ü 用ASP的Response.Write方法将符合条件的记录输出到浏览器窗口。
§ 使用Recordset对象添加记录
在数据表中添加记录的一般过程是:
Ø 提供一个输入数据的界面(*.htm)
Ø 服务器端.asp程序将用户输入的数据存入变量中
Ø 建立连接、打开数据库,形成RecordSet对象实例
Ø 利用AddNew和UpDate方法将用户输入的数据写入RecordSet对象实例中。具体步骤如下:
ü 添加一条空记录:rs.AddNew
ü 为当前记录的各字段赋值:rs.(“姓名”)=“张三”
ü 将当前记录写入数据表中:rs.Update
§ 使用Recordset对象修改记录
使用RecordSet对象修改某指定记录的字段值的方法,与添加记录比较,只是将AddNew方法用MoveNext等方法替代,以达到定位记录的目的,其它过程均相同。
§ 使用Recordset对象删除记录
删除当前记录的语句是rs.Delete。
Recordset对象只能操作“当前数据记录”,因此要用MoveFirst、MoveNext等方法移动记录指针到要删除的记录。
说明:删除记录时,一定要保证当前记录是存在的。当前记录不存的原因有以下几种:
Ø rs为空;
Ø 当前记录为最末一个记录,又用了MoveNext方法;
Ø 当前记录为第一个记录,又用了MovePrevious方法。
8. 用SQL操作数据库
SQL提供了一套完整的创建、查询、操作命令。
SQL功能
SQL命令
说 明
数据定义
CREATE
创建数据表结构
ALTER
修改数据表结构
DROP
删除数据表结构
数据查询
SELECT
查询满足条件的数据记录
数据操纵
INSERT
插入数据记录
UPDATE
修改指定记录的指定字段值
DELETE
删除指定数据记录
使用HTML5和CSS3构建基于webkit的Web Page/App
现在在ios/android上的web网站变的越来越多,智能机中ios和android系统的设备市场份额也是与日俱增,相信未来会是一个趋势,那么如何构建基于webkit的网站呢?这里有一篇文章介绍了如何用html5创建一个iphone的app,这是一个基于web的本地离线应用,相对于native应用来说基于web的应用开发和测试都非常快捷,基于webkit浏览器支持大部分的html5,也支持大部分的css3,而且开发语言也是大多数web工程师所熟悉的,最重要的一点是基于web的应用是完全跨平台的,不需要多平台的开发和测试。
开发基于webkit的web app/page时需要注意的有:
HTML特性:
<input type=”file” />在iphone上不work
<a href=”13888888888″>Call Me</a>可以调用打电话应用
google maps, iTunes和youtube的链接会在iphone上打开相应的组件
app/web page设置:
<link rel=”apple-touch-icon” href=”iphon_tetris_icon.png”/> 在设置书签的时候可以显示好看的图标
<meta name=”apple-mobile-web-app-capable” content=”yes” /> 离线应用的另一个技巧
<meta name=”apple-mobile-web-app-status-bar-style” content=”black” /> 隐藏状态栏
<link rel=”apple-touch-startup-image” href=”startup.png” /> 设置开始页面图片
<meta name=”viewport” content=”width=device-width, user-scalable=no” /> 指定mobile,并且不可缩放
<meta name=”viewport” content=”width=device-width, minimum-scale=1.0, maximum-scale=1.0″ /> 同上
CSS相关配置:
@media screen and (max-device-width: 480px){
/* 小屏幕的css样式 */
}
@media screen and (max-width: 320px){
/* 纵向的css样式 */
}
@media screen and (max-width:480px){
/* 横向的css样式 */
}
@media screen and (orientation: portrait){
/* iPad 纵向的css样式 */
}
@media screen and (orientation:landscape){
/* iPad 横向的css样式 */
}
display: -webkit-box; -webkit-box-orient:vertical/horizontal; -webkit-box-flex: value 水平垂直布局box
rounded corner/text shadow/box shadow/rgba/font-face/transform/transition/animation/border-image/gradients/ 充分利用这些css3的特性做出丰富的UI
脚本特性:
可以选用开源的javascript库,如yui, jquery, mootools, dojo …
垂直的js库,如canvas游戏库有LimeJs, GameJs等,Mobile UI库如jquery mobile, sencha touch, iui等,以及其它各种库
隐藏标题栏 – addEventListener(“load”, function() { setTimeout(function (){ window.scrollTo(0,1);}, 0); }, false);
webkitTransitionEnd/webkitAnimationStart/webkitAnimationIteration/webkitAnimationEnd transition/animation事件
localstorage/manifest 离线应用
模拟iphone的scroll效果,解决Mobile Safari下不支持position:fixed的问题:touch scroll, demo
调试:
safari上可以设置user agent为iphone上的safari(preference->advaced->developer tool),还可以手动添加android的user agent{ Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17 –Nexus }
iphone的safari上有debug调试
关注Mobile性能问题,可以采用firebuglite等书签脚本来调试
文章的标题说的是web app/page,其实用html5和css3构建的app和page没啥区别,web page也很容易转换成native的app,通过phoneGap就可以了,phoneGap所做的就是在一个native的app内嵌入了一个类似chrome的浏览器,并且创建了一个桥接,从而直接去写web app就可以了,就像这个slide的标题写的一样“HTML5 is the Future of Mobile, PhoneGap Takes You There Today”,你的app可以在5个以上的平台上运行,使用的技术是你所熟悉的html/js/css,还等什么,赶快看看它的文档实践一下吧。
展开阅读全文