博客网 >

Adodb.Stream组件详解
作者:分类:默认分类标签:

Adodb.Stream是ADO的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

adModeUnknown:缺省。当前的许可权未设置

adModeRead:只读

adModeWrite:只写

adModeReadWrite:可以读写

adModeShareDenyRead:阻止其它Connection对象以读权限打开连接

adModeShareDenyWrite:阻止其它Connection对象以写权限打开连接

adModeShareExclusive:阻止其它Connection对象以读写权限打开连接

adModeShareDenyNone:阻止其它Connection对象以任何权限打开连接   

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()
说明:在读取textstream文件时跳过下一行

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

例子:

adodb.stream 的使用地方很多 这里ME只讲一讲使用 adodb.stream 组 替代 FSO 实现读取文件的方法 --- 网上流行的一些无组件上传程序全部基于这个写成的 哈哈
因为直接讲可能会使一大半人头脑发晕 所以ME们在这里先写一个例子 看不明白不要紧 后面后一条一条的进行解释
1 On Error Resume Next
2 Set stream=Server.CreateObject("Adodb.Stream")
3 If Err.Number=-2147221005 Then
4 Response.Write "<div align='center'>非常遗憾,您的主机不支持ADODB.Stream,不能使用本程序</div>"
5 Err.Clear
6 Response.End
7 End If
8 stream.type=2
9 stream.mode=3
10 stream.open
11 dim filepath
12 filepath="a.txt"
13 stream.LoadFromFile Server.Mappath(filepath)
14 If Err.Number<>0 Then
15 Response.Write "<div align='center'>文件<font color='#ff0000'>"&Filepath&"</font>无法被打开,请检查是否存在!< /font></div>"
16 Err.Clear
17 Response.End
18 End If
19 stream.Charset="gb_2312"
20 stream.position=2
21 dim loadfile
22 loadfile=steam.readtext
23 stream.close
24 set stream=nothing
到这里读出的工作就完成了
下面来一句一句的解释
第一句不要解释了吧 会点英语的光看意思就知道了 就是 在遇到错误的时候假定到下一行 也就是如果错误不中断程序从下一句继续执行了
第二句 为 创建 stream 对象 3-7为进行错误判断 可以不写
8,9分别设置stream对象 返回 数据的类型和打开的模式
type属性 设置 stream 对象返回的数据类型 有两个值 1 返回二进制 2 返回文本
mode属性 为打开模式 1.只读 2.只写 3.读写 还有一些其它的 这里就不写了
10 句 是打开对象 只有打开后 以后的方法如 loadFromFile才能使用
11,12,13是使用loadFromFile 将文件 a.txt 里的内容 读入 stream对象里(注意是读入这个对象中,并没有另开一个变量空间)
14-18 一样是错误判断啊
19 Charset设置返回数据类型的编码格式 这里设的是 简体中文
20 Position 设置文件读取的当前指针位 也就是当前指向的是第几个字符了
21,22使用readtext的方法将对象里的内容(就是先前用LOADFROMFILE读进来的内容)写入loadfile变量
后面两句是 关闭 和 销毁 对象
当然这只是读取
要想将其内容写入一文件 可以使用 savetofile(filename,[adsavecreatenotexist|adsavecreateoverwrite])
要想往其内容里写入内容 可以使用 write(buffer) 和writetext(data,[adwritechar|adwriteline])
将一个对象的内容复制到另一个对象里
Object.CopyTo(destStream,[CharNumber])
其中destStream为另一对象 charnumber 为要复制文件的大小 不设为全部 这个在上传里必须用到 啊 哈哈
好了 就写到这里了 希望给看到的人 并需要使用他的人 有点 帮助



///////////////////////////////////////////////////////////////////////////

目前有很多无组件上传类,我大概看了一下,大多写的相当复杂,有的居然还只能传文本
最关键的是没有10行代码以下的 :)
我花了一个晚上时间研究了一下ADODB.Stream,并且用了6行代码实现了无组件上传:

strFileName = Request.QueryString("file1")
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = 1 ' adTypeBinary
objStream.Open
objStream.LoadFromFile strFileName
objStream.SaveToFile Server."123_onweb.gif",2

使用方法:

把上面的代码写成upload.asp
在浏览器里面输入:
http://XXX/upload.asp?file1=c:\上传文件\123.gif
XXX为你的主机地址
执行完后你会看到你的目录下面多了一个123_onweb.gif
他就是你要文件拉!!!!

根据原理我们可以扩展以下代码:
upload.asp文件
<%
Function GetFileName(ByVal strFile)
If strFile <> "" Then
GetFileName = mid(strFile,InStrRev(strFile, "\")+1)
Else
GetFileName = ""
End If
End function

strFileName = Request.Form("file1")
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = 1 ' adTypeBinary
objStream.Open
objStream.LoadFromFile strFileName
objStream.SaveToFile Server.MapPath(GetFileName(strFileName)),2
objStream.Close
%>

upload.htm文件
<form name="FORM" action="upload.asp" method="post">
<input type="submit" name="submit" value="OK">
<input type="file" name="file1" style="width:400" value="">
</form>

前几天要写一个东西里面有用到读文件的。

可是我不想用FSO,我怕有的空间不支持。
可是网络上找了半天没有找到一个不是用FSO写的。

还是自己做了一个。

我记得以前在做无组件上传,并保存文件的时候有用到stream
我发现有一个LoadFromFile的方法。可以读取文件。
下面是我的代码。

function readfile(URL,chartype)
set srmObj = server.CreateObject("adodb.stream")
srmObj.type=1
srmObj.mode=3
srmObj.open
srmObj.Position=0
srmObj.LoadFromFile URL

srmObj.Position = 0
srmObj.type=2
srmObj.charset=chartype
readfile=srmObj.readtext()

end function

两个参数。URL是文件的路径,好像只能绝对路径。chartype是文件以什么编码存放的。

返回一个字符串,存放文件的内容。

这个函数只能读文本文件。读二进制文件也差不多。要用的人可以自己改

<< / 总结:Autocad 与 Exc... >>

专题推荐

不平凡的水果世界

不平凡的水果世界

平凡的水果世界,平凡中的不平凡。 今朝看水果是水果 ,看水果还是水果 ,看水果已不是水果。这境界,谁人可比?在不平凡的水果世界里,仁者见仁,智者见智。

中国春节的那些习俗

中国春节的那些习俗

正月是农历新年的开始,人们往往将它看作是新的一年年运好坏的兆示期。所以,过年的时候“禁忌”特别多。当然,各个地方的风俗习惯不一样,过年的禁忌也是不一样的。

评论
0/200
表情 验证码:

eachy

  • 文章总数0
  • 画报总数0
  • 画报点击数0
  • 文章点击数0
个人排行
        博文分类
        日期归档