你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 编程语言
用ASP处理数据库中图象的总结
 

关键词:ASP

 

如何处理ASP中的图象(ORACLE数据库)

    在用ASP编程中,很多时侯要用到图象。对于单纯从数据库中处理一个图象,可以看下面的代码:

    这里假设你有个数据库名字叫:orasql,在数据库中有一个叫:POPULATION_PHOTO的数据表,

    在表中有一个RESI_PHOTO BLOB列。我们查出RESI_ID=370101的人的相片。

ODBC链接:

1、控制面板中,打开ODBC 数据源,选择系统DSN ,单击“添加”;

2、选择 Microsoft ODBC for Oracle [不要选择Oracle ODBC Driver] 命名为"orasql";

3、登陆用户名为 ws (密码为sql,oracle 中定义)并输入数据库所在服务器名.

4、测试数据库链接,接通即可。

FILE: PHOTO.ASP

***************************************

   <%@ LANGUAGE="VBSCRIPT" %>

   <%

   ' Clear out the existing HTTP header information

   Response.Expires = 0

   Response.Buffer = TRUE

   Response.Clear

 

   ' Change the HTTP header to reflect that an image is being passed.

   Response.ContentType = "image/gif"       

 

   Set cn = Server.CreateObject("ADODB.Connection")

   ' The following open line assumes you have set up a System DataSource

 

   cn.Open "orasql","ws","SQL"

   Set rs = cn.Execute("SELECT PHOTO FROM POPULATION_PHOTO WHERE RESI_ID='370101'")

   Response.BinaryWrite rs("logo")

   Response.End

   %>

*****************************************

执行这个ASP文件,在IE NetScape 中就可以看到你存在数据库中的照片了。

    但如果是同时处理文字和图象,或在一个页面中显示多个人员照片就会有些困难了。

    比如:一个网域的人员管理,后台数据库可以用SYBASEORACLESQL SERVER等。(我在这用ORACLE)当你在企业内部需要用到BROWSE/SERVER方式,即用浏览器查看员工的个人信息时,就即要处理文字信息同时还要用到关于图象的技巧,极有可能查询到同名或同姓人员的信息,这就需要在一个页面中显示多个图片。

假如查询出的同姓人员太多,就需要作分页功能。

    问题在于你显示文字信息时HTMLHEAD中的CONTENT=TEXT/HTML”,而显示图象则必须是CONTENT=IMAGE/GIF”或者是CONTENT=IMAGE/JPEG“。因此你是无法只用一个ASP文件就把文字信息和图象都处理完的,解决的办法是:用一个单独的ASP文件处理一个图象,然后在处理文字信息的ASP文件中调用这个ASP文件。

    在这给大家介绍一个我的解决方法,希望大家一起讨论:

环境:WINNT4.0   ORACLE FOR NT(unix)  IIS3.0

数据库名:ORASQL

表名:POPULATION 经主键RESI_ID 链接 POPULATION_PHOTO

目的:从POPULATION中查出未定姓名的人员的信息(自由查询),包括姓名(resi_name),性别(resi_sex),

身份证号(resi_identity) ;POPULATION_PHOTO中查出相应人员照片(RESI_PHOTO)。链接键(RESI_ID )

功能:在此我们可查询出所有某姓(例如”李“姓)的人员信息带照片(可以是符合某查询条件的多条信息),每页限显示 5人信息,自动分页;亦可按身份证号码精确查询。

第一步:创建一个查询表单QUERY.HTM

**********************************

<html>

<head>

</head>

<body>

<form method="POST" action="ORAQUERY.ASP">

  <p>请输入姓名:<input type="text" name="name" size="20"></p>

  <p> 身份证号:<input  type="text" name="id" size="23"></p>

  <p><input  type="submit" value="查 询" name="B1"><input type="reset" value="清 除" name="B2"></p>

</form>

</body>

</html>

***********************************

第二步:建立ORAQUERY.ASP

***********************************

 <!-- #INCLUDE VIRTUAL="/adovbs.inc" -->

<html>

 

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>查询显示</title>

 

</head>

<body bgColor="Azure">

<%

DIM  ls_sql

 

NAME=Request.Form("name")

ID=Request.Form("id")

 

if  (name<>"")  then

    ls_sql="SELECT * FROM population WHERE resi_name LIKE '" & name &"%'"

    IF (id<>"") THEN

        ls_sql=ls_sql &" and resi_identity='"

        ls_sql=ls_sql & id &"'"

    END IF

else

    IF (id<>"") THEN

        ls_sql="SELECT * FROM population WHERE resi_identity='" & id &"'"

    END IF

end if

 

DIM CurrentPage,rowcount,li_i

 

function CHECKNULL(data)

   IF ISNULL(DATA) THEN

    RESPONSE.WRITE ("--")

   ELSE

        RESPONSE.WRITE DATA

   END IF

end function

 

   CurrentPage=TRIM(Request("CurrentPage"))

   if CurrentPage="" then CurrentPage = 1

 

  set conn=server.CreateObject("ADODB.Connection")

  conn.open "orasql","ws","sql"

  Set rs=Server.CreateObject("ADODB.Recordset")

 

  rs.cursorType=adOpenStatic

  rs.PageSize=5

 

  rs.Open ls_sql,conn

%>

just for aesthetic feeling ,may link some picture bar.gif

<p align="left"><img src="image/bar.gif" alt="bar.gif (7089 bytes)" WIDTH="409"

HEIGHT="63"></p>

 

<p align="center"><font color="#0000FF" face="楷体_GB2312"><big><big>  </big></big></font></p>

<%

nobody="对不起!数据库里没有您要找的人员资料!"%>

<%IF rs.eof THEN %>

<p><br></p>

 

<p align="center"><font size="5" color="OrangeRed"><%Response.Write(nobody)%><% response.write ls_sql%> </font></p>

<%else

DIM li,IDNO

DIM ls_file,ls_filetrue

 

    li=0

    rs.AbsolutePage=Cint(CurrentPage)

    rowcount=0

 

while NOT rs.eof AND rowCount<rs.PageSize

    li = li+1

 

ls_file="showing"

ls_filetrue=""

IDNO=rs.Fields("resi_id").value

%>

<div align="center"><div align="center"><center>

 

<table border="1" width="528" height="134">

  <tr>

    <td width="110" height="40" align="center">姓名</td>

    <td width="288" height="40"><%

    CHECKNULL(rs("resi_name"))

Set RsPHOTO = conn.Execute("SELECT RESI_PHOTO FROM population_photo WHERE resi_id='"&IDNO&"'")

%></td>

    <td width="112" height="135" rowspan="3"><%

if NOT RsPHOTO.eof then

    Session(LI)=rsPHOTO("resi_photo")

    ls_filetrue=ls_file+Cstr(li)+".asp"

%><img src="<%=ls_filetrue%>" alt="照片">

<%

else

    RESPONSE.WRITE "  无照片"

end if%>        </td>

  </tr>

  <tr>

    <td width="110" height="40" align="center">性别</td>

    <td width="288" height="40"><%

CHECKNULL(rs("resi_sex"))%></td>

  </tr>

  <tr>

    <td width="110" height="40" align="center">身份证号</td>

    <td width="288" height="40"><%

CHECKNULL(rs("resi_identity"))

 %></td>

  </tr>

</table>

</center></div><%response.write "<br> ( "&li&" ) 条纪录<br>" %>

 

<br>

<%

 rowCount=rowCount+1

 rs.MoveNext

WEND

 %>

 <%

 response.write "<p align=""left""> [ "&CurrentPage&" ] </p>"

 response.write"<hr><br>"

 for li_i=1 to rs.PageCount%> 

  <a href="xbmquery1.asp?CurrentPage=<%=li_i%>"><font face="Impact">( <%=li_i%> )</font></a>

<% next%>

</div>

<%rs.close

set rs=nothing

rsphoto.close

set rsphoto=nothing

conn.close

set conn=nothing

END IF

%>

<p> </p>

 

<p align="center">

<applet code="fphover.class" codebase="_fpclass" width="120" height="24">

  <param name="text" value="重置查询">

  <param name="color" value="#008000">

  <param name="hovercolor" value="#0000FF">

  <param name="textcolor" value="#FFFFFF">

  <param name="bgcolor" value="#FFFFFF">

  <param name="effect" value="glow">

  <param name="url" value="query.asp" valuetype="ref">

  <param name="font" value="Dialog">

  <param name="fontstyle" value="regular">

  <param name="fontsize" value="14">

</applet>

</p>

</body>

</html>

***********************************

第三步:建立处理图象的ASP文件(SHOWING1.ASP)。第一页中每幅照片需要一个文件。以后各页会自动循环使用第一页照片文件。(SHOWING1.ASP)用来显示每页中第一幅照片。

***********************************

<%@ LANGUAGE="VBSCRIPT" %>

<%

 

   Response.Expires = 0

   Response.Buffer = TRUE

   Response.Clear

   

  resi_photo=session.Contents(1)

  ' Get picture

  Response.ContentType = "image/gif"

 

  Response.BinaryWrite resi_photo

  Response.End

%>

**********************************

注:1、附若要在一页中显示人员信息条数较少,(如少于5 )可复制(SHOWING1.ASP) 5 遍,分别定义为 (SHOWING2.ASP)(SHOWING3.ASP)(SHOWING4.ASP)(SHOWING5.ASP)。每个文件中resi_photo=session.Contents(li)语句,相应 li 修改为第 li 幅照片。亦可把(ORAQUERY.ASP)li_flag = li+1 变量定义为Session(li_flag) (SHOWING<1--5>.ASP)文件内容完全相同,均接收Session(li_flag)变量.

    2、若一页中显示人员信息条数太多,可把下面语句加入 (ORAQUERY.ASP) 循环显示语句中(调照片前),动态创建showing.asp 文件,每次显示照片前便产生相应文件,然后在退出时,删除这些文件(fso.DeleteFile "C:\path\showing*.asp")

动态创建showing.asp 文件语句:

set showing.asp path

   xmlPath = "C:\web\showing"&li&".asp"

   set fso = server.createobject("scripting.filesystemobject")

  set f = fso.createTextFile(xmlPath,true)

    f.writeline "<% Response.Expires = 0"

    f.writeline " Response.Buffer = TRUE "

    f.writeline " Response.Clear"

    f.writeline "resi_photo=session.Contents("&li_flag&")"

    f.writeline "Response.ContentType = ""image/gif"""

    f.writeline "Response.BinaryWrite resi_photo"

    f.writeline "Response.End"

    f.writeline "%"&">"

    f.writeline "<head><title></title>"

    f.writeline "</head><body></body>"

    f.writeline "</html>"

  set f = nothing

  set fso = nothing

    这里主要就是用到了一个小技巧就是利用了一个SESSION变量来实现查询出的photo 传递。

避免重复连接数据库。大家对应上述只需少量改动,就可实现一个页面既有文字又有图象多条查询了!

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089