,其它的一概不管,原封不动地交给浏览器处理,所以直接把扩展名改为ASP后,数据不会被下载,但是会被浏览器直接打开.这样别人将内容拷贝后仍然可以还原成原始的MDB文件。 三 解决 大家应该比较了解动网论坛,他的数据库里有一个NotDown的表,这个表只有一个字段,并且这个字段的类型是OLE型,用于存放二进制的数据,这个表有什么作用呢?呵呵... 把动网的数据库扩展名改成ASP,然后在浏览器里输入对应路径的数据库地址,看到什么了?一串错误的ASP脚本错误的信息,当然数据库也没办法DOWN下来了,为什么会这样呢,那个NotDown表究竟存放的是什么呢?? 大家好好看看第二节中的第3种方法,仔细琢磨一下应该不难明白结论,正是因为NotDown表是有类似这样的脚本致使ASP.DLL把它当作真正的ASP文件来执行,但是这恰恰是动网数据库故意安排的语法错误,致使ASP.DLL解释里出错,因而把ASP出错信息显示出来,从而保护了真正的数据. 四 实践 NotDown表中倒底写了些什么呢??呵呵,是不是有点急了. 我们知道NotDown表由于是二进制字段,所有我们读写数据库的时候,也要改一改常规,ADO中专门有读写二进制字段的方法它们分别是AppendChunk 和GetChunk 有了这两个方法我们就可以看看那个表里面究竟是啥玩意了 <%
------此处省略连接数据200字,得到数据连接对象Conn
set rs=server.createobject("adodb.recordset"
sql="select notdown from NotDown"
rs.open sql,0,1
data=rs(0).GetChunk(rs(0).ActualSize) 读出所有的二进制数据
rs.close
set rs=nothing
----关闭数据库连接
response.BinaryWrite(data)由于data是二进制,所以要调用response打印二进制的方法将其输出
%>过足瘾了吧,想知道结果是什么吗,赶紧回去调试看看啊 五 改进 上面的方法虽然是保住了数据库,但是有个错误的提示,总是觉得有点不爽,我们来改点别的如果试图输入数据库的地址来下载数据库,将会自动跳转到搜狐网站,代码如下 <%
------此处省略连接数据200字,得到数据连接对象Conn
set rs=server.createobject("adodb.recordset")
sql="select notdown from NotDown"
str="<%response.redirect(""http://www.sohu.com"""&chr(37)&">"
由于字段是二进制数据,我们要是直接把Str字符串字入数据库的话会有一点问题
在VBS中每一个字符占两个字节,所以我们要去掉高位的空字节
for i=1 to lenb(str)
if midb(str,1,i)<>0 then
data=data+ascb(midb(str,1,i))
end if
next
rs.open sql,0,3
data=rs(0).AppendChunk(data) 写入二进制数据
rs.update
rs.close
set rs=nothing
%>OK了,看看运行效果,甚至还可以加入一段JS脚本,弹出一个对话框,吓吓那些下载数据库的小猫们,还不敢快试试去 转载自月光博客 [ http://www.williamlong.info ]
