首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网络编程-> 数据库教程
asp讲座之七:asp与数据库(二)
作者:网友供稿 点击:281
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
在上一讲中,我们学习了如何与数据库建立连接和从数据库中检索数据,今天的内容是如何向数据库中添加新数据、修改和删除数据库中的数据。

一、 向数据库中添加新数据
方法一:使用SQL语句,例wuf50.asp。
为了简化以后的程序,将与Access数据库的连接部分放在一个文件中,此文件以后需要用到时不再说明。
<% AdoAccess.asp
Option Explicit
Response.Expires = 0
第一部分: 建立连接
Dim Cnn, StrCnn
Set Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:\Inetpub\home\asp\Northwind.mdb"
Cnn.Open StrCnn
%>
程序wuf50.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<% wuf50.asp
第二部分: 使用 Connection 对象的 Execute 添加新数据
Dim StrSQL, rsTest
StrSQL = "INSERT INTO 运货商 (公司名称,电话) VALUES(wufeng,0571-7227298)"
Cnn.Execute StrSQL
%>
<HTML>
<BODY>
<% 第三部分: 将得到的记录集显示到浏览器上
Set rsTest = Cnn.Execute("Select * From 运货商")
Do While Not rsTest.EOF    
Response.Write rsTest(0) & "  "  & rsTest(1) & "  "  & rsTest(2) & "  "  & "<BR>"
    rsTest.MoveNext       
Loop

第四部分: 打扫战场
Cnn.close
Set rsTest = Nothing: Set Cnn = Nothing
%>
</BODY>
</HTML>
请注意以下几点:
1. 使用SQL语句向Access数据库中添加数据时必须使用Insert Into,而向SQL Server数据库中添加数据,使用Insert就可以了。
2. 使用SQL语句添加数据的格式如上例,注意需要添加wufeng,在语句中必须使用wufeng,因为SQL语句使用作为字符串的分界符。
3. 把本例同以前所学的知识结合起来,就可以实现从HTML表单中添加数据。
4. 注意有一个数据类型为自动编号的字段,如本例中的“运货商ID”,因此你大可不必考虑如何写代码获得一个递增的编号。

方法二:使用Recordset对象的Addnew方法,例wuf51.asp。
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#include file="adovbs.inc"-->
<% wuf51.asp
第二部分: 使用 Recordset 对象的 AddNew 方法添加新数据
Dim StrSQL, rsTest
Set rsTest = server.CreateObject("ADODB.Recordset")
rsTest.CursorType = adOpenKeySet  adOpenDynamic
没有下面这一句, 将不允许更新数据库, 为什么?
rsTest.LockType = adLockOptimistic
rsTest.Open "运货商",Cnn,,,adCmdTable

rsTest.AddNew
rsTest("公司名称") = "wufeng"
rsTest("电话") = "0571-7227298"
rsTest.Update
%>
<HTML>
<BODY>
<% 第三部分: 将得到的记录集显示到浏览器上
将数据库指针移到表中的第一条记录
If Not rsTest.EOF <> 0 Then
Response.Write "表中现有 [" & rsTest.RecordCount & "] 条数据" & "<Br><Br>"
rsTest.MoveFirst
End If

Do While Not rsTest.EOF    
Response.Write rsTest(0) & "  "  & rsTest(1) & "  "  & rsTest(2) & "  "  & "<BR>"
    rsTest.MoveNext       
Loop

第四部分: 打扫战场
Cnn.close
Set rsTest = Nothing: Set Cnn = Nothing
%>
</BODY>
</HTML>
分析:
1. 为何要设置rsTest.LockType = adLockOptimistic
Recordset对象的LockType属性有四个可选值:
adLockReadOnly——默认值,表示以只读方式打开记录集,因而无法无法更改数据,在这种情况下使用AddNew方法就会发生错误。
adLockPessimistic——保守式记录锁定(逐条)。采用编辑时立即锁定数据源的记录的方式。此时,其他用户不能访问该数据。
adLockOptimistic ——开放式记录锁定(逐条)。只在调用 Update 方法时锁定记录。想想,这个属性是不是与我们讲过的Application对象的Lock、Unlock属性的意思差不多。
adLockBatchOptimistic——开放式批更新。用于成批更新数据,与UpdateBatch方法相对应。
    顺便我们再提一下上一讲中提到的CursorType 属性,它同样有四个值:
adOpenForwardOnly——仅向前游标,默认值,只能在记录中向前滚动。这可以节省资源并提高性能。
adOpenStatic——静态游标。可以用来查找数据或生成报告的记录集合的静态副本。另外,对其他用户所作的添加、更改或删除不可见。 推荐在ASP中只使用这两种游标。
adOpenKeyset——键集游标。键集游标与动态游标相似,不同的只是禁止查看其他用户添加的记录,并禁止访问其他用户删除的记录,其他用户所作的数据更改将依然可见。
adOpenDynamic——动态游标。可以看见其他用户所作的添加、更改和删除。允许在记录集中进行所有类型的移动。
可以肯定的一定是,这样抽象的描述有点似是而非,还是弄不太明白,简单的说,
(1) 如果仅仅检索数据,使用默认值就可以了;
(2) 如果使用Update方法更新一条数据,LockType属性使用adLockOptimistic,使用UpdataBatch方法成批更新数据,则使用adLockBatchOptimistic。
(3) 如果对数据库有写动作,CursorType 属性一般使用adOpenKeyset就够了。
怎么样?即使还不太明白,但会用了吧。

2. 如果你并不精通数据库,通常在输出显示前使用rsTest.MoveFirst将指针移至第一条记录是大有益处的。但是如果数据库中没有任何数据,就无法使用MoveFirst方法,所以使用前先用rsTest.EOF属性判断数据库中是否有数据。
3. 只有当游标类型设为adOpenKeyset或adOpenStatic时,才能使用RecordCount属性(获取记录集中的记录数目)。

二、 修改数据库中已存在的数据
方法一:使用 SQL 语句。例wuf52.asp,程序基本上与wuf50.asp类似,这里仅列出关键部分。
第二部分: 使用 Connection 对象的 Execute 方法修改数据
Dim StrSQL, rsTest
StrSQL = "UPDATE 运货商 SET 电话 = (503) 555-3188 WHERE 电话 LIKE %99%"
Cnn.Execute StrSQL
    修改数据不用INSERT INTO…VALUES,而是用UPDATE…SET语句,WHERE子句的意思是将含有字符串“99”(“LIKE”、“%”在模糊查询时经常用到)的电话号码改为(503) 555-3188,如果不设置条件,表中所有的电话号码都会被改掉。

方法二:使用 Recordset 对象的 Update 方法。程序wuf53.asp(类似例程wuf51.asp)
第二部分: 使用 Recordset 对象的 Update 方法修改数据
Dim StrSQL, rsTest
Set rsTest = server.CreateObject("ADODB.Recordset")
rsTest.LockType = adLockOptimistic
StrSQL = "SELECT 姓氏,名字,出生日期 FROM 雇员 WHERE 出生日期 = #55-03-04#"
rsTest.Open StrSQL, Cnn,,,adCmdText

rsTest("名字") = "中文"
rsTest.Update
分析:
1. SQL语句中,如果数据库是Access数据库,则日期用#55-03-04#括起来,如本例;如果是SQL Server数据库,则日期要用’55-03-04’括起来。
2. rsTest.Open StrSQL, Cnn,,,adCmdText中,由于第一个参数是SQL语句,所以第五个参数为adCmdText,其实,第五个参数完全可以省略,但是加上它会使脚本的执行效率更高。
3. 使用方法一,一次可以更新符合条件的所有记录(多条记录或一条记录),但方法二中的Update只能修改当前记录(符合条件的第一条记录)。

三、 删除数据库中的数据
方法一:使用 SQL 语句。例程wuf55.asp
第二部分: 使用 SQL 语句删除数据
Dim StrSQL, rsTest
StrSQL = "DELETE FROM 运货商 WHERE 电话 = 0571-7227298"
Cnn.Execute StrSQL

方法二:使用 Recordset 对象的 Delete 方法。例程wuf56.asp
第二部分: 使用 Recordset 对象的 Delete 方法删除数据
Dim StrSQL, rsTest
Set rsTest = server.CreateObject("ADODB.Recordset")
rsTest.LockType = adLockOptimistic
StrSQL = "SELECT * FROM 运货商 WHERE 电话 = 0571-7227298"
rsTest.Open StrSQL, Cnn,,,adCmdText

While Not rsTest.EOF
rsTest.Delete
rsTest.MoveNext
Wend
    若记录集中有多条记录符合条件,则必须使用循环,否则,Delete方法只删除当前记录,即第一条符合条件的记录。

四、 其它一些有用的知识
1. 成批更新数据
上面我们讲了如何使用Recordset对象的Update方法更新数据,事实上,Recordset 对象可支持两类更新:立即更新和批更新。
使用立即更新,一旦调用 Update 方法,对数据的所有更改将被立即写入现行数据源。
使用批更新,可以使提供者将多个记录的更改存入缓存,然后使用 UpdateBatch 方法在单个调用中将它们传送给数据库。更新多个记录时,批更新比立即更新更有效。
缺省为立即更新模式。使用批更新模式,要使用客户端游标,例wuf54.asp。
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#include file="adovbs.inc"-->
<% wuf54.asp
第二部分: 批更新模式
Dim StrSQL, rsTest
Set rsTest = server.CreateObject("ADODB.Recordset")
rsTest.CursorLocation = adUseClient          ‘使用客户端游标类型
rsTest.LockType = adLockBatchOptimistic
StrSQL = "SELECT * FROM 运货商 WHERE 电话 LIKE %99%"
rsTest.Open StrSQL, Cnn,,,adCmdText

rsTest.MoveFirst
While Not rsTest.EOF
rsTest("公司名称") = "中文"
rsTest.MoveNext
Wend
rsTest.UpdateBatch
%>
<HTML>
<BODY>
<% 第三部分: 将得到的记录集显示到浏览器上
rsTest.Requery
Do While Not rsTest.EOF    
Response.Write rsTest(0) & "  "  & rsTest(1) & "  "  & rsTest(2) & "  "  & "<BR>"
    rsTest.MoveNext       
Loop

第四部分: 打扫战场
Cnn.close
Set rsTest = Nothing: Set Cnn = Nothing
%>
</BODY>
</HTML>
注意:
1) rsTest.CursorLocation = adUseClient有两个值,另一个值为adUseServer(默认),对初学者而言,Recordset对象的游标类型是比较难的部分,这里不再详细介绍,以免越来越糊涂,请在实际处理中慢慢摸索(多试)。
2) rsTest.Requery:使用 Requery 方法刷新数据源的 Recordset 对象的全部内容。调用该方法等于相继调用 Close 和 Open 方法。

2.学会使用Recordset对象的Filter 属性
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#include file="adovbs.inc"-->
<% wuf57.asp
第二部分: 使用 Recordset 对象的 Filter 属性
Dim StrSQL, rsTest
Set rsTest = server.CreateObject("ADODB.Recordset")
rsTest.CursorType = adOpenStatic
rsTest.LockType = adLockOptimistic
rsTest.Open "运货商",Cnn,,,adCmdTable

筛选出符合条件的记录,而其它记录则被过滤掉
rsTest.Filter = "公司名称 = wufeng"
If rsTest.EOF Then       ‘若无此记录,则新增
rsTest.AddNew
rsTest("公司名称") = "wufeng"
rsTest("电话") = "0571-7227298"
rsTest.Update
Else           ‘若有符合该条件的记录,修改符合条件的第一条记录
rsTest("电话") = "(571) 7227298"
rsTest.Update
End If
%>
<HTML>
<BODY>
<% 第三部分: 将得到的记录集显示到浏览器上
请仔细比较下面这一句要与不要的区别
rsTest.Filter=""    用来清除 Filter 属性
rsTest.MoveFirst
Do While Not rsTest.EOF    
Response.Write rsTest(0) & "  "  & rsTest(1) & "  "  & rsTest(2) & "  "  & "<BR>"
    rsTest.MoveNext       
Loop

第四部分: 打扫战场
Cnn.close
Set rsTest = Nothing: Set Cnn = Nothing
%>
</BODY>
</HTML>

3.除了上面介绍的两种方法之外,还可使用SQL语句、Command对象的Excute方法维护数据库。例wuf58.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#include file="adovbs.inc"-->
<% wuf58.asp
第二部分: 使用SQL语句、Command对象的Excute方法维护数据库
Dim StrSQL, rsTest, cmdChange
StrSQL = "INSERT INTO 运货商 (公司名称,电话) VALUES(wufeng,0571-7227298)"
  
创建命令对象。
Set cmdChange =server.CreateObject("ADODB.Command")
Set cmdChange.ActiveConnection = Cnn
cmdChange.CommandText = StrSQL
cmdChange.Execute
%>
<HTML>
<BODY>
<% 第三部分: 将得到的记录集显示到浏览器上
Set rsTest = server.CreateObject("ADODB.Recordset")
rsTest.Open "运货商", Cnn, , , adCmdTable
Do While Not rsTest.EOF    
Response.Write rsTest(0) & "  "  & rsTest(1) & "  "  & rsTest(2) & "  "  & "<BR>"
    rsTest.MoveNext       
Loop

第四部分: 打扫战场
Cnn.close
Set rsTest = Nothing: Set Cnn = Nothing
%>
</BODY>
</HTML>

    本讲主要介绍了维护数据的三种方法,初学者只要掌握前两种方法就可以了。一般而言,尽量使用SQL语句解决问题,简单明了;而使用Recordset对象的最大好处是可以利用其大量的属性和丰富的游标类型,有更多的选择,但也给使用带来一些难题,关键在于多摸索,多试验。

文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·jsp留言板源代码4-JSP教程,数据库相关
·“脱衣秀”泛滥 四川打击淫秽色情视频聊天室
·c#中使用 crystal reports (水晶报表)的打包和部署问题-.NET教程,报表/图形/Office
·MDAC2.8 下载!-ASP教程,数据库相关
·数据库安装包的制作(参考MSDN)-.NET教程,安装和部署
·asp讲座之七:asp与数据库(二)
·深度和广度优先分油问题(C#实现)-.NET教程,C#语言
·C#在状态栏中,自绘进度条,-.NET教程,C#语言
·怎么清除sql server日志
·C#中的接口-.NET教程,C#语言
最新文章
·sql server 2005 ce基础概要_数据库教程
·用flash as代码制作按钮弹出窗口_flash教程
·alexa:戏曲性地调整_alexa排名
·google也推出域名注册_google推广
·技巧总结:div中class与id的区别及应用_css教程
·windows vista命令runas.exe全解析_windows vista
·photoshop将美女照片处理成仿古斑驳油画_photoshop教程
·百度主题推广代码的完全解析-知己知彼_网赚技巧
·你的google adsense帐号是否被人盗用?_网赚技巧
·如何挑出google adsense中单价极低的广告商_网赚技巧
相关主题
  • ASP讲座之十:自己动手编写组件-ASP教程,组件开发
  • ASP讲座之十一:结束语——给您一些建议-ASP教程,性能优化
  • ASP讲座之九:ASP与数据库(四)-ASP教程,数据库相关
  • ASP讲座之八:ASP与数据库(三)-ASP教程,数据库相关
  • ASP讲座之七:ASP与数据库(二)-ASP教程,数据库相关
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭