Adodb.Stream 使用错误记录: 错误 '800a0bb9' 参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。

为测试用Adodb.Stream中文转码,写了个函数

Function Encode() 
dim ax,stm
	ax=chrb(233)&chrb(152)&chrb(191)
	Set stm = server.CreateObject("Adodb.Stream")
	stm.mode = 3
	stm.Type = 1
	stm.Open 
	stm.Write ax
	stm.Position = 0
	stm.Type = 2
	stm.charset = "utf-8" 
	Encode = stm.readtext 
	stm.close 
	Set stm=nothing
End Function 
结果: ADODB.Stream   错误 '800a0bb9'   参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。

原来是变量类型错误,输入的变量必须是单字节数组,上面的 AX成了字符串了,故出错。

excel里面简单更改后正确:

Sub Encode()
Dim ax() As Byte, stm, Encodex
    ReDim ax(2)
    ax(0) = 233
    ax(1) = 152
    ax(2) = 191
    Set stm = CreateObject("Adodb.Stream")
    stm.Mode = 3
    stm.Type = 1
    stm.Open
    '//stm.LoadFromFile filePath
    stm.Write ax
    stm.Position = 0
    stm.Type = 2
    stm.Charset = "utf-8"
    Encodex = stm.ReadText
    stm.Close
    Set stm = Nothing
End Sub

另外一段会造成这个错误的代码如下:

	FormSize=Request.TotalBytes
	FormData=Request.BinaryRead(FormSize)
	CLStr=ChrB(13)&ChrB(10)
	DataStart=InStrB(FormData,CLStr&CLStr)+4  '4是两对回车换行符的长度
	DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
	DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
	FormData=MidB(FormData,DataStart,DataSize)  'midb这个处理出来的二进制流串根本不能用于ADODB.Stream .Write提交

set str=server.CreateObject("ADODB.Stream") 'str为源数据流
str.Mode=3 '设置打开模式,3为可读可写
str.Type=1 '设置数据类型,1为二进制数据
str.Open
str.Write FormData  '这里必然报错

上面的这个代码想当然的使用MIDB来处理二进制流,殊不知,MIDB返回的已经不再是二进制流,而是变成了单个长字符串,所以根本不能这样用,被这段代码害了一个晚上。。。。。


ADODB.Stream .Write '的输入参数在ASP里面正确的做法是 .copyto write_stream,second_enter-first_enter-3, 利用 .copyto直接截取字节流


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jessezappy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值