仓酷云

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

[学习教程] ASP网页设计用SQL Server为Web扫瞄器供应图象2

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

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

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

x
国内有些大的CRM厂商的ASP就写得不错.无论是概念还是它里面用JAVASCRIPT的能力.并不是说现在的程序员用了ASP.NET来写程序就可以说自己高档了创建ActiveX静态链接库

利用VB5.0,我们要开辟一个ActiveX静态链接库。这个静态链接库让我们可以毗连到SQL数据库,提取图片数据,
并把它们保留成文件,放在目次里。要创建静态链接库,请在翻开VB程序以后实行以下步骤:起首:在文件(File)菜单
里,选择新建项目(NewProject)。接着,在新创建项目对话框里,双击ActiveXDLL图标。VB主动地向项目里增添一个
类,叫做Class1。然后,在属性容器里,双击称号(Name)属性,把它改成clsImageLoader,坚持instancing属性为缺省
值MultiUse不动。最初,在项目(Project)菜单里,选择Project1属性,翻开项目属性对话框。选择通用(General)选
项卡,把项目称号改成ImageLoader。别的字段能够不论,坚持原样。单击断定(OK)完成对ImageLoader这个工程的设
置。

在类里,写进了5个Let属性,1个Get属性(只读)和两个办法。Let属性传送静态链接库必要的信息,Get属性供应动
态链接库天生的图片文件的地位。两个办法用来翻开到数据库的毗连,以天生图片文件。表A总结了这些属性和办法的作
用。固然,依据项目标必要,能够在类里到场更庞大的功效。

表A:在ActiveX静态链接库里的属性和办法

属性/办法感化

DbName翻开数据库毗连所需的数据库称号。

TableName,
NameOfImageColumn,翻开纪录集所必要的信息。
NameOfImageTypeColumn,
NameOfImageIdColumn

ImageFile(只读)把图片文件的称号和地位前往给容器。

OpenConnection(办法)翻开数据库毗连。

CreateTemplateImageFile(办法)从数据库提取图片数据,并把它保留到目次里。


在类里另有别的的公有子程序,用来初始化类、停止类、翻开纪录集、创建图片文件,和处置大概的毛病。

注重微软举动数据工具ADO1.5(如今为2.0)被用来毗连SQL数据库。也能够利用别的数据会见办法,好比远程数据工具RDO。
在这个项目里,必需利用ADO。操纵办法是,单击项目(Project)菜单,然后选择援用(References)菜单项。在援用对
话框里,选中微软ActiveXDataObjects1.5库,然后单击断定(OK)。

在列表B里,列出了类ImageLoader完全源代码。类里利用的变量界说都在代码外部给出,另有别的正文,匡助了解高低
文。

列表B:类ImageLoader的完全源代码

PrivatemAdoConnAsNewADODB.Connection
PrivatemAdoRstAsNewADODB.Recordset
PrivatemstrDbNameAsString
PrivatemstrTableNameAsString
PrivatemstrImageColumnNameAsString图片字的称号。
PrivatemstrImageTypeColumnNameAsString图片范例字段的称号。
PrivatemstrImageIdColumnNameAsString图片ID字段的称号。
PrivatemstrFileName()AsString数组,内里包括文件名和路径。
PrivatemlngImageId()AsLong数组,内里包括图片ID
PrivatemlngNumberOfFilesAsLong
ConstBLOCKSIZE=102400


PublicPropertyLetDbName(ByValstrValAsString)
mstrDbName=strVal
EndProperty

PublicPropertyLetTableName(ByValstrValAsString)
mstrTableName=strVal
EndProperty

PublicPropertyLetNameOfImageColumn(ByValstrValAsString)
mstrImageColumnName=strVal
EndProperty

PublicPropertyLetNameOfImageTypeColumn(ByValstrValAsString)
mstrImageTypeColumnName=strVal
EndProperty

PublicPropertyLetNameOfImageIdColumn(ByValstrValAsString)
mstrImageIdColumnName=strVal
EndProperty

PublicPropertyGetImageFile(ByValImageIdAsInteger)AsString
DimintPosAsInteger
DimblnFindIdAsBoolean
DimiAsInteger

blnFindId=False
Fori=0TomlngNumberOfFiles-1
IfmlngImageId(i)=ImageIdThen
intPos=5+Len(ImageId)+3
ImageFile=Right(mstrFileName(i),intPos)reformatthelocationoffile.
blnFindId=True
EndIf
Nexti

IfblnFindId=FalseThen
Err.Clear
Err.RaisevbObjectError+23,"GetImageFile","Cantfindimagefile!"
EndIf

EndProperty


PublicSubOpenConnection()
**********************************************************
感化:翻开数据库毗连。
**********************************************************

OnErrorGoToError_handler
IfmstrDbName=""ThenGoToError_handler
IfmAdoConn.State=adStateOpenThenmAdoConn.Close
mAdoConn.ConnectionString="DRIVER={SQLServer};SERVER=(local);UID=sa;PWD=;WSID=JIA;DATABASE="&
mstrDbName
mAdoConn.ConnectionTimeout=15
mAdoConn.Open
ExitSub

Error_handler:
CallHandleError
EndSub

PublicSubCreateTempImageFile(ByValImageIdAsInteger)
DimstrImageTypeAsString
DimiAsInteger
**********************************************************
感化:翻开纪录集,提取二进制数据,并把数据存进文件。注重文件名利用图片ID天生。
输出:图片ID。
**********************************************************
IfmAdoConn.State=adStateClosedThenExitSub

CallOpenRecordset(ImageId)

IfmAdoRst.State=adStateClosedThenExitSub

OnErrorGoToError_handler

Fori=0TomlngNumberOfFiles-1
检测图片文件是不是已存在。
IfmlngImageId(i)=ImageIdThenExitSub
Nexti

mlngNumberOfFiles=mlngNumberOfFiles+1
ReDimPreservemstrFileName(mlngNumberOfFiles)改动数组巨细。
ReDimPreservemlngImageId(mlngNumberOfFiles)改动数组巨细。
mlngImageId(mlngNumberOfFiles-1)=ImageId
strImageType=mAdoRst.Fields(mstrImageTypeColumnName)获得图片范例。
mstrFileName(mlngNumberOfFiles-1)=App.Path&"images"&_
"image"&LTrim(Str(ImageId))&"."&strImageType获得图片文件称号和地位。
CallReadFromDB(mAdoRst.Fields(mstrImageColumnName),_
mstrFileName(mlngNumberOfFiles-1),AdoRst.Fields(mstrImageColumnName).ActualSize)
ExitSub

Error_handler:
CallHandleError

EndSub

PrivateSubOpenRecordset(ByValImageIdAsInteger)
DimSqlTextAsString
**********************************************************
感化:翻开纪录集。
输出:图片ID。
**********************************************************

OnErrorGoToError_handler
IfmAdoRst.State=adStateOpenThenmAdoRst.Close
SqlText="SELECT"&mstrImageColumnName&","&_
mstrImageTypeColumnName&"FROM"&mstrTableName&_
"WHERE"&mstrImageIdColumnName&"="&ImageId

SetmAdoRst.ActiveConnection=mAdoConn
mAdoRst.OpenSqlText,,adOpenStatic,adLockReadOnlyOpenrecordset.

ExitSub


Error_handler:
CallHandleError
EndSub

PrivateSubReadFromDB(fldAsADODB.Field,ByValDiskFileAsString,_
FldSizeAsLong)
DimNumBlocksAsInteger
DimLeftOverAsLong
DimbyteData()AsByte字节数组,用于长的可变二进制数据LongVarBinary。
DimstrDataAsString字符串,用于长的可变二进制数据LongVarChar。
DimDestFileNumAsInteger
DimpicAsVariant
DimiAsInteger
**********************************************************
感化:提取二进制数据并把数据放进文件。
输出:图片字段,文件名/地位和数据尺寸。
**********************************************************

IfLen(Dir(DiskFile))>0Then删除已存在的方针文件。
KillDiskFile
EndIf

DestFileNum=FreeFile
OpenDiskFileForBinaryAsDestFileNum
NumBlocks=FldSizeBLOCKSIZE
LeftOver=FldSizeModBLOCKSIZE

SelectCasefld.Type
CaseadLongVarBinary用于图片数据范例。
byteData()=fld.GetChunk(LeftOver)
pic=fld.GetChunk(LeftOver)
PutDestFileNum,,byteData()

Fori=1ToNumBlocks
byteData()=fld.GetChunk(BLOCKSIZE)
PutDestFileNum,,byteData()
Nexti

CaseadLongVarChar用于文本数据范例。
Fori=1ToNumBlocks
strData=String(BLOCKSIZE,32)
strData=fld.GetChunk(BLOCKSIZE)
PutDestFileNum,,strData
Nexti

strData=String(LeftOver,32)
strData=fld.GetChunk(LeftOver)
PutDestFileNum,,strData
CaseElse
Err.Clear
Err.RaisevbObjectError+22,"ReadfromDB","NotaChunkRequiredcolumn!"
EndSelect

CloseDestFileNum

EndSub

PrivateSubHandleError()
DimadoErrsAsADODB.Errors
DimerrLoopAsADODB.Error
DimstrErrorAsString
DimiAsInteger
**********************************************************
感化:处置大概的毛病。
**********************************************************

IfmAdoConn.State=adStateClosedThenGoToDone
i=1
SetadoErrs=mAdoConn.Errors
ForEacherrLoopInadoErrs列举毛病集。
WitherrLoop
strError=strError&vbCrLf&"ADOError#"&.Number
strError=strError&vbCrLf&"Description"&.Description
strError=strError&vbCrLf&"Source"&.Source
i=i+1
EndWith
Next

Done:
Err.RaisevbObjectError+21,"",strError
EndSub

PrivateSubClass_Initialize()
mlngNumberOfFiles=0
EndSub

PrivateSubClass_Terminate()
DimiAsInteger
OnErrorGoToError_handler
IfmAdoRst.State=adStateOpenThenmAdoRst.Close封闭纪录集。
IfmAdoConn.State=adStateOpenThenmAdoConn.Close封闭毗连。
SetmAdoRst=Nothing
SetmAdoConn=Nothing
ExitSub

Error_handler:
CallHandleError
EndSub

Error_handler:
CallHandleError
EndSub


下一步是编译静态链接库。在文件(File)菜单里,单击创建(Make)ImageLoader.dll。VB会扣问保留静态链接库的位
置,然后就编译项目。在要ASP文件里利用ImageLoader.dll这个静态链接库,必需在Windows注册内外注册它。操纵办法
是,在NT的启动菜单里,选择运转(Run),然后在输出框里输出上面的命令行:

regsvr32localpathImageLoader
注重,实践利用时要用静态链接库实践地点的完全路径交换下面命令行里的“localpath”。如今,就能够在程序里,好比
ASP文件里利用这个静态链接库了。
使用cdonts,可以发送、查看邮件,实现webmail的功能。结合wsh,可以实现对nt主机的管理,如nt用户管理、iis虚拟主机设置、exchange邮箱设置等等,就像管理本地机一样方便。
分手快乐 该用户已被删除
沙发
发表于 2015-1-19 13:20:27 来自手机 | 只看该作者
我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。
只想知道 该用户已被删除
板凳
发表于 2015-1-27 06:13:55 | 只看该作者
Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件
愤怒的大鸟 该用户已被删除
地板
发表于 2015-2-5 03:11:09 | 只看该作者
那么,ASP.Net有哪些改进呢?
谁可相欹 该用户已被删除
5#
发表于 2015-2-11 03:15:07 | 只看该作者
在平时的学习过程中要注意现学现用,注重运用,在掌握了一定的基础知识后,我们可以尝试做一些网页,也许在开始的时候我们可能会遇到很多问题,比如说如何很好的构建基本框架。
第二个灵魂 该用户已被删除
6#
发表于 2015-3-1 20:30:34 | 只看该作者
用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
精灵巫婆 该用户已被删除
7#
发表于 2015-3-10 23:29:44 | 只看该作者
那么,ASP.Net有哪些改进呢?
再见西城 该用户已被删除
8#
发表于 2015-3-17 16:09:27 | 只看该作者
兴趣爱好,那么你无须学编程,申请一个域名和空间,在网上下载一些免费开源的CMS系统,你不用改代码,只须熟悉它们的后台操作,像office一样简单方便,很快就能建一个站点,很多站长都是这样做的
冷月葬花魂 该用户已被删除
9#
发表于 2015-3-24 12:00:56 | 只看该作者
我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-24 04:00

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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