仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 421|回复: 7
打印 上一主题 下一主题

[学习教程] ASP网页设计ASP与数据库(四)

[复制链接]
透明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:25:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
因为现在数据库都使用标准的SQL语言对数据库进行管理,所以如果是标准SQL语言,两者基本上都可以通用的。SQLServer还有更多的扩展,可以用存储过程,数据库大小无极限限制。在本讲中,我们将次要先容怎样利用参数及存储历程。

1、利用Command工具和Parameter工具传送参数
本讲将次要利用MicrosoftSQLServer7.0数据库,先创建一个毗连文件AdoSQL7.asp备用,今后用到时不再出格申明。
<%AdoSQL7.asp
OptionExplicit
Response.Expires=0

第一部分:创建毗连
DimCnn,StrCnn
SetCnn=Server.CreateObject("ADODB.Connection")
StrCnn="Provider=sqloledb;UserID=sa;Password=;InitialCatalog=pubs;DataSource=ICBCZJP"
Cnn.OpenStrCnn
%>
注重:本人利用时要将DataSource设为你的数据库服务器地点的呆板名。
别的,之前利用Access数据库时,用MicrosoftAccess97能够很便利的检察字段及数据,而利用SQLServer数据库,特别是其实不在数据库服务器,而是在另外一台呆板上调试ASP剧本时,要检察字段及数据便需别的安装工具,这里向你供应一个工具:Msqry32.exe(MicrosoftQuery),这个文件随Office97安装,一样平常位于目次“MicrosoftOfficeOffice”下。
例wuf70.asp:
<%@LANGUAGE="VBSCRIPT"%>
<!--#includefile="AdoSQL7.asp"-->
<!--#includefile="adovbs.inc"-->
<%wuf70.asp
DimcmdTest,prmTest,rsTest
创立Command工具
SetcmdTest=Server.CreateObject("ADODB.Command")
‘Recordset、Command工具都能够经由过程ActiveConnection属性来毗连Connection工具
cmdTest.ActiveConnection=Cnn
SQL命令-含两个参数,用?暗示
cmdTest.CommandText="UpdatejobsSetjob_desc=?Wherejob_id=?"
设命令范例为SQL语句
cmdTest.CommandType=adCmdText
Prepared属性决意是不是将SQL命令先行编译,将其设为True,能够加速运转
cmdTest.Prepared=True

创立Parameter工具
SetprmTest=cmdTest.CreateParameter("job_desc",adVarChar,adParamInput,50,"收集")
将数据追加到Parameters数据汇合中
cmdTest.Parameters.AppendprmTest

SetprmTest=cmdTest.CreateParameter("job_id",adSmallInt,adParamInput,,"12")
cmdTest.Parameters.AppendprmTest

实行修正C不必要前往了局,复杂的利用cmdTest.Execute就能够了
cmdTest.Execute

从头设置参数运转C即可修正另外一条数据
cmdTest.Parameters("job_id")="1"
cmdTest.Parameters("job_desc")="测试"
cmdTest.Execute

从头设置参数运转
cmdTest("job_id")="14"
cmdTest("job_desc")="金融"
cmdTest.Execute

SetrsTest=Cnn.Execute("Selectjob_id,job_descFromjobs")
WhileNotrsTest.EOF
Response.WritersTest(0)&rsTest(1)&"<br>"
rsTest.MoveNext
Wend

Cnn.close:SetprmTest=Nothing
SetcmdTest=Nothing:SetCnn=Nothing
%>
剖析:
1.Command工具的CreateParameter办法用来为SQL命令或存储历程创建参数工具,共有五个参数(五个参数都是可选项):
第一个参数:参数工具的称号;
第二个参数:参数工具的数据范例,品种太多,仍是参考ADO匡助吧,这里adVarChar(字符串值)、adSmallInt(2字节带标记整型);
第三个参数:参数范例。能够是:adParamInput(唆使输出参数)、adParamOutput(唆使为输入参数)、adParamReturnValue(唆使为前往值)、adParamUnknown(唆使参数范例没法断定)、adParamInputOutput(唆使为输出/输入参数);
第四个参数:参数的数据长度,最好指定为与数据库中对应字段长度相称,以避免利用时堕落,特别数据范例为VarChar时,假如是整型或日期型则不用供应该值;
第五个参数:参数的设置初值。
2.cmdTest.Parameters.Append办法增添一个Parameter工具到Parameters数据汇合中,从本例中也可看到怎样利用多个参数。
3.从本例能够看到,只必要从头设定输出参数,即可实行对其他数据的修正,十分便利,这一思绪在编程时也是最经常使用的办法之一。
4.重设参数,既可使用cmdTest.Parameters,也能够省略为cmdTest("job_id")。

2、在ASP中利用存储历程
甚么是存储历程(存储历程位于数据库服务器中,是一个SQL语句的汇合,可包括一个或多个SQL语句)、如何创立存储历程不属于本讲座的内容,本讲座次要是举例申明在ASP中怎样挪用存储历程。
利用存储历程的优点是年夜年夜的,存储历程比在ASP剧本中运转SQL命令效力更高;能够进步全体功能并加重收集负载(削减了在收集服务器和数据服务器之间的交互);能够优化ASP代码和加强代码天真性等等。
(一)在存储过程当中利用输出参数
本例中利用的存储历程为SQLServer7.0自带的“byroyalty”,内里的一条SQL语句十分复杂,不过是多了一个CREATEPROCEDUREbyroyalty,而且有一个输出参数为@percentage:
CREATEPROCEDUREbyroyalty@percentageint
AS
selectau_idfromtitleauthor
wheretitleauthor.royaltyper=@percentage
例wuf71.asp
<%@LANGUAGE=VBScript%>
<!--#includefile="AdoSQL7.asp"-->
<!--#includefile="adovbs.inc"-->
<%wuf71.asp
DimcmdTest,prmTest,rsTest
SetcmdTest=Server.CreateObject("ADODB.Command")
cmdTest.CommandText="byroyalty"存储历程名
设命令范例为存储历程
cmdTest.CommandType=adCmdStoredProc

创立Parameter工具
SetprmTest=Server.CreateObject("ADODB.Parameter")
‘Type属性对应wuf70.asp中的第二个参数
prmTest.Type=adInteger4字节的带标记整型
‘Direction属性对应wuf70.asp中的第三个参数
prmTest.Direction=adParamInput
‘Value属性对应wuf70.asp中的第五个参数
prmTest.Value=30
cmdTest.Parameters.AppendprmTest

SetcmdTest.ActiveConnection=Cnn
‘必要前往一个纪录集,故利用SetrsTest=cmdTest.Execute
SetrsTest=cmdTest.Execute

WhileNotrsTest.EOF
Response.WritersTest(0)&"<br>"
rsTest.MoveNext
Wend

Cnn.close
SetrsTest=Nothing:SetprmTest=Nothing
SetcmdTest=Nothing:SetCnn=Nothing
%>
CommandText属性既能够指定SQL命令,也能够指定为存储历程大概是表称号。
在本例中,创立Parameter工具与wuf70.asp略有分歧,实在细心看看,意义也是差未几的,本例另有两个属性未用:prmTest.Name、prmTest.Size,加上Type、Direction和Value,对应于wuf70.asp中的五个参数。

(二)利用输入参数
从数据库表中获得一个纪录或盘算一个值时,必要利用前往输入参数的存储历程。为了举例,先在SQLServer的pubs库中新建一存储历程OUTemploy,该存储历程必要输出两个日期,然后输入一个最年夜值。
CREATEPROCEDUREOUTemploy
(
@job_lvltinyintOUTPUT,
@hire_date1datetime,
@hire_date2datetime
)
AS
select@job_lvl=MAX(job_lvl)fromemployee
wherehire_date>=@hire_date1andhire_date<=@hire_date2
有多种办法能够创建存储历程:
1.利用MicrosoftSQLServer的EnterpriseManager,翻开后在右边的树目次中顺次翻开:ConsoleRootCMicrosoftSQLServersCSQLServerGroupCICBCZJP(WindowsNT)CdatabasesCpubsCstoredprocedureCNewstoredprocedure,输出存储历程后,还可对其举行语法检测;
2.利用MicrosoftSQLServer的QueryAnalyzer,先毗连数据库服务器并选择pubs数据库。输出下面的存储历程并点击ExecuteQuery(或按F5);
3.利用VB6.0,翻开菜单“视图”/“数据视图窗口”后,右键单击“数据链接”/“新建数据链接”;
4.利用ASP剧本创立存储历程,例wuf75.asp:
<%@LANGUAGE=VBScript%>
<!--#includefile="AdoSQL7.asp"-->
<!--#includefile="adovbs.inc"-->
<%wuf75.asp
DimStrSQL
注:&Chr(10)&Chr(13)完整能够不要,次要是为了悦目
StrSQL="CREATEPROCEDUREOUTemploy(@job_lvltinyintOUTPUT,"&Chr(10)&Chr(13)&_
"@hire_date1datetime,@hire_date2datetime)AS"&Chr(10)&Chr(13)&_
"select@job_lvl=MAX(job_lvl)fromemployee"&_
"wherehire_date>=@hire_date1andhire_date<=@hire_date2"

Cnn.ExecuteStrSQL
Response.Write"创立存储历程乐成"
Cnn.close:SetCnn=Nothing
%>
存储历程创立后,除利用菜单,你还可使用SQL语句“DropProcedureOUTemploy”删除它。
例wuf72.aspC把所必要的输出参数送进存储历程并获得输入了局。
<%@LANGUAGE=VBScript%>
<!--#includefile="AdoSQL7.asp"-->
<!--#includefile="adovbs.inc"-->
<%wuf72.asp
DimcmdTest,prmTest
SetcmdTest=Server.CreateObject("ADODB.Command")
cmdTest.ActiveConnection=Cnn
cmdTest.CommandText="OUTemploy"存储历程名
cmdTest.CommandType=adCmdStoredProc

创立Parameter工具
SetprmTest=cmdTest.CreateParameter("job_lvl",adTinyInt,adParamOutput)
cmdTest.Parameters.AppendprmTest
adTinyInt-1字节带标记整型
adDbDate-日期值(yyyymmdd)

SetprmTest=cmdTest.CreateParameter("hiredate1",adDBDate,adParamInput,,"1993-05-09")
cmdTest.Parameters.AppendprmTest

SetprmTest=cmdTest.CreateParameter("hiredate2",adDBDate,adParamInput,,"1994-02-01")
cmdTest.Parameters.AppendprmTest

cmdTest.Execute
‘上面三种表达体例意义一样
Response.Writecmdtest("job_lvl")&"<br>"
Response.WritecmdTest.Parameters("job_lvl")&"<br>"
Response.WritecmdTest.Parameters("job_lvl").Value

Cnn.close
SetprmTest=Nothing
SetcmdTest=Nothing:SetCnn=Nothing
%>
(三)利用前往代码参数
用Return语句能够从存储历程前往分歧的前往代码,以下面存储历程先获得一个纪录集,然后,如有叫Margaret的雇员则前往1,不然前往0。
CreateProcedureReturnemploy
AS
selectemp_id,fnamefromemployee
IfExists(SelectfnameFromemployeeWherefname=Margaret)
Return(1)
Else
Return(0)
例wuf73.asp
<%@LANGUAGE=VBScript%>
<!--#includefile="AdoSQL7.asp"-->
<!--#includefile="adovbs.inc"-->
<%wuf73.asp
DimcmdTest,prmTest,rsTest
SetcmdTest=Server.CreateObject("ADODB.Command")
cmdTest.ActiveConnection=Cnn
cmdTest.CommandText="Returnemploy"存储历程名
cmdTest.CommandType=adCmdStoredProc

SetprmTest=cmdTest.CreateParameter("ReturnValue",adInteger,adParamReturnValue)
cmdTest.Parameters.AppendprmTest

SetrsTest=cmdTest.Execute()
WhileNotrsTest.EOF
Response.WritersTest(0)&"]["&rsTest(1)&"<br>"
rsTest.MoveNext
Wend
rsTest.Close:SetrsTest=Nothing
前往cmdtest("ReturnValue")之前,必需先封闭rsTest,不然了局毛病

Ifcmdtest("ReturnValue")=1Then
Response.Write"有该雇员"
Else
Response.Write"无该雇员"
EndIf

Cnn.close
SetprmTest=Nothing
SetcmdTest=Nothing:SetCnn=Nothing
%>

3、怎样处置年夜数据
这里的“年夜数据”次要是指Text(年夜文本)和image(图象)字段,接纳后面所述的办法没法准确猎取其数据。必需起首利用Size=rsTest(0).ActualSize猎取字段值的实践长度,然后再利用rsTest(0).GetChunk(Size)获得数据。在实践利用过程当中,因为这些字段都对照年夜,为了节俭、公道利用服务器资本,一样平常均接纳分段读取的办法。例wuf74.asp:
<%@LANGUAGE=VBScript%>
<!--#includefile="AdoSQL7.asp"-->
<!--#includefile="adovbs.inc"-->
<%wuf74.asp
DimStrSQL,rsTest
‘pr_info是一个文本字段
StrSQL="Selectpr_info,pub_idFrompub_info"
SetrsTest=Cnn.Execute(StrSQL)

DimBasicSize,BeginSize,LText
DoWhileNotrsTest.EOF
Response.WritersTest(1)&"<br>"
‘每次读取1024字节
BasicSize=1024
BeginSize=0
WhileBeginSize<rsTest(0).ActualSize
LText=rsTest(0).GetChunk(BasicSize)
BeginSize=BeginSize+BasicSize
‘逐段输入到客户端
Response.WriteLText
Wend

Response.Write"<br><br>"
rsTest.MoveNext
Loop

Cnn.close
SetrsTest=Nothing:SetCnn=Nothing
%>
在本例中,每次最多读取1024字节,分屡次读完。反之,假如将年夜数据写至数据库中,办法相似下面,不外不是利用GetChunk办法,而是利用AppendChunk办法:
rsTest(0).AppendChunkLtext

注重:最初先容一个关于SQLServer数据库的小技能,假如你碰到过这类情形:数据库的中文数据显现出来均是乱码,请不要惊惶。你只需往我的站点下载sqlsrv32.dll掩盖“C:WindowsSystem”下的同名文件就能够了。成绩产生的泉源是SQLServer驱动程序,典范的情形产生在Windows98第二版(SQLServer驱动程序的版本号为3.70.06.23)或Windows2000中大概安装了MDAC2.5(版本号为3.70.08.20)。ASP是依赖组件的,能访问数据库的组件好多就有好多种,再有就是你微软的工具可是什么都要收钱的啊!
只想知道 该用户已被删除
沙发
发表于 2015-1-25 19:50:46 | 只看该作者
封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。
冷月葬花魂 该用户已被删除
板凳
发表于 2015-2-3 19:53:37 | 只看该作者
不能只是将它停留在纸上谈兵的程度上。
再现理想 该用户已被删除
地板
发表于 2015-2-9 04:50:54 | 只看该作者
以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。
小女巫 该用户已被删除
5#
发表于 2015-2-26 23:57:01 | 只看该作者
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:
活着的死人 该用户已被删除
6#
发表于 2015-3-8 18:40:18 | 只看该作者
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。
深爱那片海 该用户已被删除
7#
发表于 2015-3-16 11:03:43 | 只看该作者
我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。
精灵巫婆 该用户已被删除
8#
发表于 2015-3-22 22:33:11 | 只看该作者
先学习用frontpage熟悉html编辑然后学习asp和vbscript建议买书进行系统学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 02:48

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表