ADODB.Stream的用法实例

程序代码:
内容: download.asp?file=相对路径的文件
就可以把这个文件下载下来

<%

call downloadFile(replace(replace(Request("file"),"\",""),"/",""))

Function downloadFile(strFile)
' make sure you are on the latest MDAC version for this to work
' -------------------------------------------------------------


' get full path of specified file
strFilename = server.MapPath(strFile)


' clear the buffer
Response.Buffer = True
Response.Clear

'create stream
Set s = Server.CreateObject("ADODB.Stream")
s.Open

'Set as binary
s.Type = 1

'load in the file
on error resume next


' check the file exists
Set fso = Server.CreateObject("Scripting.FileSystemObject")
if not fso.FileExists(strFilename) then
Response.Write("<h1>Error:</h1>" & strFilename & " does not exist<p>")
Response.End
end if


' get length of file
Set f = fso.GetFile(strFilename)
intFilelength = f.size

s.LoadFromFile(strFilename)
if err then
Response.Write("<h1>Error: </h1>" & err.Description & "<p>")
Response.End
end if

' send the headers to the users browser
Response.AddHeader "Content-Disposition", "attachment; filename=" & f.name
Response.AddHeader "Content-Length", intFilelength
Response.CharSet = "UTF-8"
Response.ContentType = "application/octet-stream"

' output the file to the browser
Response.BinaryWrite s.Read
Response.Flush


' tidy up
s.Close
Set s = Nothing


End Function

%>

ASP中利用ADODB.Stream对象将字节流转换为字符流

程序代码:


内容: ASP中利用ADODB.Stream对象将字节流转换为字符流
'--------------------------------------------------------------------
' 二进制转字符串
'
' 入口参数:字节流
' 函数返回:字符串
' Code By:Madpolice 2002-12-20
' 利用 ADODB.Stream 对象,速度比原来的字符替换法快了n倍,n≈30!!)
'--------------------------------------------------------------------
'下面的常量是函数用到的,因为我在函数外面已经定义过了,因此不在这里重复定义
'---- StreamTypeEnum Values ----
'Const adTypeBinary = 1
'Const adTypeText = 2

Function Bytes2bStr(vin)
Dim BytesStream,StringReturn

Set BytesStream = Server.CreateObject("ADODB.Stream") '建立一个流对象
With BytesStream
   .Type = adTypeText         '设置流对象的类型为字符流
   .Open                      '打开流对象
   .WriteText vin             '把vin写入流对象中

   .Position = 0              '设置流对象的起始位置是0,也就是开头
                             '这个操作必须做,为什么我也不知道,失败了n次得出的结论
           '如果不进行这个操作,下面设置Charset属性就出错
   .Charset = "GB2312"        '设置流对象的编码方式为GB2312
   .Position = 2              '设置流对象的起始位置是2(过滤掉开始的一个控制字符
           '这个控制字符是WriteText方法按默认属性Charset="Unicode"
           '读入数据的时候自动加到数据开头的,字符的值是FF3F
                             '这个控制字符占2字节,所以Position设置为2
           '表示略过2个字节,下面的ReadText方法从Position开始读数据
   StringReturn = .ReadText   '把流对象的内容保存在StringReturn变量中
   .close                     '关闭流对象
End With
Set BytesStream = Nothing      '销毁流对象

Bytes2bStr = StringReturn

End Function
'--------------------------------------------------------------------

 

内容: 用Adodb.Stream将以二进制方式保存在数据库中的文件保存到硬盘

对于上传的数据库中的文件有的时候需要保存成硬盘上的文件,下面的代码以ACCESS数据库为例,演示怎样通过

Adodb.Stream将文件保存到硬盘

表:Demo的结构
=======================================
id: 自动编号
filename:文本
data: OLE 对象

代码
=======================================
<%
Dim Conn,ConnStr,Rs,Sql,MyStream

ConnStr="DBQ=" + Server.Mappath("Demo.mdb") + ";DRIVER={Microsoft Access Driver (*.mdb)};"

Set Conn = Server.CreateObject("Adodb.Connection")

Conn.Open ConnStr

Sql = "select * from demo where id=1"

Set Rs = Server.CreateObject("Adodb.RecordSet")

Rs.Open Sql,Conn,1,3

Set MyStream=Server.CreateObject("Adodb.Stream")

MyStream.Type = 1

MyStream.Open

MyStream.Write Rs("data").GetChunk(rs("data").ActualSize-78)

MyStream.SaveToFile "c:\" & Rs("fileName")

Rs.Close

Set Rs = Nothing

Conn.Close

Set Conn = Nothing
%>

用Adodb.Stream将以二进制方式保存在数据库中的文件保存到硬盘
程序代码:

内容: 用Adodb.Stream将以二进制方式保存在数据库中的文件保存到硬盘

对于上传的数据库中的文件有的时候需要保存成硬盘上的文件,下面的代码以ACCESS数据库为例,演示怎样通过

Adodb.Stream将文件保存到硬盘

表:Demo的结构
=======================================
id: 自动编号
filename:文本
data: OLE 对象

代码
=======================================
<%
Dim Conn,ConnStr,Rs,Sql,MyStream

ConnStr="DBQ=" + Server.Mappath("Demo.mdb") + ";DRIVER={Microsoft Access Driver (*.mdb)};"

Set Conn = Server.CreateObject("Adodb.Connection")

Conn.Open ConnStr

Sql = "select * from demo where id=1"

Set Rs = Server.CreateObject("Adodb.RecordSet")

Rs.Open Sql,Conn,1,3

Set MyStream=Server.CreateObject("Adodb.Stream")

MyStream.Type = 1

MyStream.Open

MyStream.Write Rs("data").GetChunk(rs("data").ActualSize-78)

MyStream.SaveToFile "c:\" & Rs("fileName")

Rs.Close

Set Rs = Nothing

Conn.Close

Set Conn = Nothing
%>

 


组件:Adodb.Stream的属性和方法

内容: 组件:"Adodb.Stream"
有下列方法:
Cancel 方法
使用方法如下
Object.Cancel
说明:取消执行挂起的异步 Execute 或 Open 方法的调用。
Close 方法
使用方法如下
Object.Close
:关闭对像
CopyTo 方法
使用方法如下
Object.CopyTo(destStream,[CharNumber])
说明:将对像的数据复制,destStream指向要复制的对像,CharNumber为可选参数,指要复制的字节数,不选为全部复制


Flush 方法
使用方法如下
Object.Flush
说明:
LoadFromFile 方法
使用方法如下
Object.LoadFromFile(FileName)
说明:将FileName指定的文件装入对像中,参数FileName为指定的用户名。
Open 方法
使用方法如下
Object.Open(Source,[Mode],[Options],[UserName],[Password])
说明:打开对像,
参数说明:Sourece 对像源,可不指定
Mode 指定打开模式,可不指定,可选参数如下:
adModeRead =1
adModeReadWrite =3
adModeRecursive =4194304
adModeShareDenyNone =16
adModeShareDenyRead =4
adModeShareDenyWrite =8
adModeShareExclusive =12
adModeUnknown =0
adModeWrite =2
Options 指定打开的选项,可不指定,可选参数如下:
adOpenStreamAsync =1
adOpenStreamFromRecord =4
adOpenStreamUnspecified=-1
UserName 指定用户名,可不指定。
Password 指定用户名的密码
Read 方法
使用方法如下:
Object.Read(Numbytes)
说明:读取指定长度的二进制内容。
参数说明:Numbytes指定的要读取的找度,不指定则读取全部。

ReadText 方法
使用方法如下:
Object.ReadText(NumChars)
说明:读取指定长度的文本
参数说明:NumChars指定的要读取的找度,不指定则读取全部。

SaveToFile 方法
使用方法如下:
Object.SaveToFile(FileName,[Options])
说明:将对像的内容写到FileName指定的文件中
参数说明:FileName指定的文件
Options 存取的选项,可不指定,可选参数如下:
adSaveCreateNotExist =1
adSaveCreateOverWrite =2

SetEOS 方法
使用方法如下:
Object.setEOS()
说明:
SkipLine 方法
使用方法如下:
Object.SkipLine()
说明:
Write 方法
使用方法如下:
Object.Write(Buffer)
说明:将指定的数据装入对像中。
参数说明:Buffer 为指定的要写入的内容。
WriteText 方法
使用方法如下:
Object.Write(Data,[Options])
说明:将指定的文本数据装入对像中。
参数说明:Data 为指定的要写入的内容。
Options 写入的选项,可不指定,可选参数如下:
adWriteChar =0
adWriteLine =1


有下列属性:
Charset
EOS 返回对像内数据是否为空。

LineSeparator 指定换行格式,可选参数有
adCR =13
adCRLF =-1
adLF =10

Mode 指定或返加模式。

Position 指定或返加对像内数据的当前指针。

Size 返回对像内数据的大小。

State 返加对像状态是否打开。

Type 指定或返回的数据类型,可选参数为:
adTypeBinary =1
adTypeText =2
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值