|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
因为现在数据库都使用标准的SQL语言对数据库进行管理,所以如果是标准SQL语言,两者基本上都可以通用的。SQLServer还有更多的扩展,可以用存储过程,数据库大小无极限限制。在上一讲中,我们进修了怎样与数据库创建毗连和从数据库中检索数据,明天的内容是怎样向数据库中增加新数据、修正和删除数据库中的数据。
1、向数据库中增加新数据
办法一:利用SQL语句,例wuf50.asp。
为了简化今后的程序,将与Access数据库的毗连部分放在一个文件中,此文件今后必要用到时不再申明。
<%AdoAccess.asp
OptionExplicit
Response.Expires=0
第一部分:创建毗连
DimCnn,StrCnn
SetCnn=Server.CreateObject("ADODB.Connection")
StrCnn="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:InetpubhomeaspNorthwind.mdb"
Cnn.OpenStrCnn
%>
程序wuf50.asp
<%@LANGUAGE=VBScript%>
<!--#includefile="AdoAccess.asp"-->
<%wuf50.asp
第二部分:利用Connection工具的Execute增加新数据
DimStrSQL,rsTest
StrSQL="INSERTINTO运货商(公司称号,德律风)VALUES(wufeng,0571-7227298)"
Cnn.ExecuteStrSQL
%>
<HTML>
<BODY>
<%第三部分:将失掉的纪录集显现到扫瞄器上
SetrsTest=Cnn.Execute("Select*From运货商")
DoWhileNotrsTest.EOF
Response.WritersTest(0)&""&rsTest(1)&""&rsTest(2)&""&"<BR>"
rsTest.MoveNext
Loop
第四部分:扫除疆场
Cnn.close
SetrsTest=Nothing:SetCnn=Nothing
%>
</BODY>
</HTML>
请注重以下几点:
1.利用SQL语句向Access数据库中增加数据时必需利用InsertInto,而向SQLServer数据库中增加数据,利用Insert就能够了。
2.利用SQL语句增加数据的格局如上例,注重必要增加wufeng,在语句中必需利用wufeng,由于SQL语句利用作为字符串的分界符。
3.把本例同之前所学的常识分离起来,就能够完成从HTML表单中增加数据。
4.注重有一个数据范例为主动编号的字段,如本例中的“运货商ID”,因而你年夜可不用思索怎样写代码取得一个递增的编号。
办法二:利用Recordset工具的Addnew办法,例wuf51.asp。
<%@LANGUAGE=VBScript%>
<!--#includefile="AdoAccess.asp"-->
<!--#includefile="adovbs.inc"-->
<%wuf51.asp
第二部分:利用Recordset工具的AddNew办法增加新数据
DimStrSQL,rsTest
SetrsTest=server.CreateObject("ADODB.Recordset")
rsTest.CursorType=adOpenKeySetadOpenDynamic
没有上面这一句,将不同意更新数据库,为何?
rsTest.LockType=adLockOptimistic
rsTest.Open"运货商",Cnn,,,adCmdTable
rsTest.AddNew
rsTest("公司称号")="wufeng"
rsTest("德律风")="0571-7227298"
rsTest.Update
%>
<HTML>
<BODY>
<%第三部分:将失掉的纪录集显现到扫瞄器上
将数据库指针移到表中的第一笔记录
IfNotrsTest.EOF0Then
Response.Write"表中现有["&rsTest.RecordCount&"]条数据"&"<Br><Br>"
rsTest.MoveFirst
EndIf
DoWhileNotrsTest.EOF
Response.WritersTest(0)&""&rsTest(1)&""&rsTest(2)&""&"<BR>"
rsTest.MoveNext
Loop
第四部分:扫除疆场
Cnn.close
SetrsTest=Nothing:SetCnn=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属性(猎取纪录会合的纪录数量)。
2、修正数据库中已存在的数据
办法一:利用SQL语句。例wuf52.asp,程序基础上与wuf50.asp相似,这里仅列出关头部分。
第二部分:利用Connection工具的Execute办法修正数据
DimStrSQL,rsTest
StrSQL="UPDATE运货商SET德律风=(503)555-3188WHERE德律风LIKE%99%"
Cnn.ExecuteStrSQL
修正数据不必INSERTINTO…VALUES,而是用UPDATE…SET语句,WHERE子句的意义是将含有字符串“99”(“LIKE”、“%”在含混查询时常常用到)的德律风号码改成(503)555-3188,假如不设置前提,表中一切的德律风号码城市被改失落。
办法二:利用Recordset工具的Update办法。程序wuf53.asp(相似例程wuf51.asp)
第二部分:利用Recordset工具的Update办法修正数据
DimStrSQL,rsTest
SetrsTest=server.CreateObject("ADODB.Recordset")
rsTest.LockType=adLockOptimistic
StrSQL="SELECT姓氏,名字,出身日期FROM雇员WHERE出身日期=#55-03-04#"
rsTest.OpenStrSQL,Cnn,,,adCmdText
rsTest("名字")="中文"
rsTest.Update
剖析:
1.SQL语句中,假如数据库是Access数据库,则日期用#55-03-04#括起来,如本例;假如是SQLServer数据库,则日期要用’55-03-04’括起来。
2.rsTest.OpenStrSQL,Cnn,,,adCmdText中,因为第一个参数是SQL语句,以是第五个参数为adCmdText,实在,第五个参数完整能够省略,可是加上它会使剧本的实行效力更高。
3.利用办法一,一次能够更新切合前提的一切纪录(多笔记录或一笔记录),但办法二中的Update只能修正以后纪录(切合前提的第一笔记录)。
3、删除数据库中的数据
办法一:利用SQL语句。例程wuf55.asp
第二部分:利用SQL语句删除数据
DimStrSQL,rsTest
StrSQL="DELETEFROM运货商WHERE德律风=0571-7227298"
Cnn.ExecuteStrSQL
办法二:利用Recordset工具的Delete办法。例程wuf56.asp
第二部分:利用Recordset工具的Delete办法删除数据
DimStrSQL,rsTest
SetrsTest=server.CreateObject("ADODB.Recordset")
rsTest.LockType=adLockOptimistic
StrSQL="SELECT*FROM运货商WHERE德律风=0571-7227298"
rsTest.OpenStrSQL,Cnn,,,adCmdText
WhileNotrsTest.EOF
rsTest.Delete
rsTest.MoveNext
Wend
若纪录会合有多笔记录切合前提,则必需利用轮回,不然,Delete办法只删除以后纪录,即第一条切合前提的纪录。
4、别的一些有效的常识
1.成批更新数据
下面我们讲了怎样利用Recordset工具的Update办法更新数据,现实上,Recordset工具可撑持两类更新:当即更新和批更新。
利用当即更新,一旦挪用Update办法,对数据的一切变动将被当即写进现行数据源。
利用批更新,可使供应者将多个纪录的变动存进缓存,然后利用UpdateBatch办法在单个挪用中将它们传送给数据库。更新多个纪录时,批更新比当即更新更无效。
缺省为当即更新形式。利用批更新形式,要利用客户端游标,例wuf54.asp。
<%@LANGUAGE=VBScript%>
<!--#includefile="AdoAccess.asp"-->
<!--#includefile="adovbs.inc"-->
<%wuf54.asp
第二部分:批更新形式
DimStrSQL,rsTest
SetrsTest=server.CreateObject("ADODB.Recordset")
rsTest.CursorLocation=adUseClient‘利用客户端游标范例
rsTest.LockType=adLockBatchOptimistic
StrSQL="SELECT*FROM运货商WHERE德律风LIKE%99%"
rsTest.OpenStrSQL,Cnn,,,adCmdText
rsTest.MoveFirst
WhileNotrsTest.EOF
rsTest("公司称号")="中文"
rsTest.MoveNext
Wend
rsTest.UpdateBatch
%>
<HTML>
<BODY>
<%第三部分:将失掉的纪录集显现到扫瞄器上
rsTest.Requery
DoWhileNotrsTest.EOF
Response.WritersTest(0)&""&rsTest(1)&""&rsTest(2)&""&"<BR>"
rsTest.MoveNext
Loop
第四部分:扫除疆场
Cnn.close
SetrsTest=Nothing:SetCnn=Nothing
%>
</BODY>
</HTML>
注重:
1)rsTest.CursorLocation=adUseClient有两个值,另外一个值为adUseServer(默许),对初学者而言,Recordset工具的游标范例是对照难的部分,这里不再具体先容,以避免愈来愈懵懂,请在实践处置中渐渐探索(多试)。
2)rsTest.Requery:利用Requery办法革新数据源的Recordset工具的全体内容。挪用该办法即是接踵挪用Close和Open办法。
2.学会利用Recordset工具的Filter属性
<%@LANGUAGE=VBScript%>
<!--#includefile="AdoAccess.asp"-->
<!--#includefile="adovbs.inc"-->
<%wuf57.asp
第二部分:利用Recordset工具的Filter属性
DimStrSQL,rsTest
SetrsTest=server.CreateObject("ADODB.Recordset")
rsTest.CursorType=adOpenStatic
rsTest.LockType=adLockOptimistic
rsTest.Open"运货商",Cnn,,,adCmdTable
选择出切合前提的纪录,而别的纪录则被过滤失落
rsTest.Filter="公司称号=wufeng"
IfrsTest.EOFThen‘若无此纪录,则新增
rsTest.AddNew
rsTest("公司称号")="wufeng"
rsTest("德律风")="0571-7227298"
rsTest.Update
Else‘如有切合该前提的纪录,修正切合前提的第一笔记录
rsTest("德律风")="(571)7227298"
rsTest.Update
EndIf
%>
<HTML>
<BODY>
<%第三部分:将失掉的纪录集显现到扫瞄器上
请细心对照上面这一句要与不要的区分
rsTest.Filter=""用来扫除Filter属性
rsTest.MoveFirst
DoWhileNotrsTest.EOF
Response.WritersTest(0)&""&rsTest(1)&""&rsTest(2)&""&"<BR>"
rsTest.MoveNext
Loop
第四部分:扫除疆场
Cnn.close
SetrsTest=Nothing:SetCnn=Nothing
%>
</BODY>
</HTML>
3.除下面先容的两种办法以外,还可以使用SQL语句、Command工具的Excute办法保护数据库。例wuf58.asp
<%@LANGUAGE=VBScript%>
<!--#includefile="AdoAccess.asp"-->
<!--#includefile="adovbs.inc"-->
<%wuf58.asp
第二部分:利用SQL语句、Command工具的Excute办法保护数据库
DimStrSQL,rsTest,cmdChange
StrSQL="INSERTINTO运货商(公司称号,德律风)VALUES(wufeng,0571-7227298)"
创立命令工具。
SetcmdChange=server.CreateObject("ADODB.Command")
SetcmdChange.ActiveConnection=Cnn
cmdChange.CommandText=StrSQL
cmdChange.Execute
%>
<HTML>
<BODY>
<%第三部分:将失掉的纪录集显现到扫瞄器上
SetrsTest=server.CreateObject("ADODB.Recordset")
rsTest.Open"运货商",Cnn,,,adCmdTable
DoWhileNotrsTest.EOF
Response.WritersTest(0)&""&rsTest(1)&""&rsTest(2)&""&"<BR>"
rsTest.MoveNext
Loop
第四部分:扫除疆场
Cnn.close
SetrsTest=Nothing:SetCnn=Nothing
%>
</BODY>
</HTML>
本讲次要先容了保护数据的三种办法,初学者只需把握前两种办法就能够了。一样平常而言,只管利用SQL语句办理成绩,复杂了然;而利用Recordset工具的最年夜优点是能够使用其大批的属性和丰厚的游标范例,有更多的选择,但也给利用带来一些困难,关头在于多探索,多实验。问题是他们究竟是喜欢他们是使用软件时,速度快还是速度慢好.(当然在3秒以内).无论是他们输入资料时,查找资料时,分析资料时. |
|