提醒:本页面将不再更新、维护或者支持,文章、评论所叙述内容存在时效性,涉及技术细节或者软件使用方面不保证能够完全有效可操作,请谨慎参考!

大家知道一般情况下ASP插入一条数据采用的是INSERT INTO语句,先建立ADODB.Connection,然后直接Execute INSERT语句,简单方便,但是有时候我们需要插入二进制到数据库中那该怎么办呢?

首先大家想到的是建立长字符串比如像Access备注那样的数据库字段,然后将二进制进行编码,最后像往常一样INSERT语句插入,至于编码的办法有很多,比如Base64编码,更详细的可以参考这篇文章 《Base24、Base64编码的几种程序实现》 。但是这种办法有其性能和空间上的缺点,特别是对比较大的二进制数据进行处理时,不过一般我们存储到数据库的二进制文件不应该很大,否则会给数据库带来不必要的负担。

可能有读者发现,数据库比如Access有二进制(Binary)这个字段,这说明我们可以不用编码就能把二进制插入到数据库中,如果是这样的话,传统的INSERT INTO明显就不能胜任的,这时后我们就需要ADO的AppendChunk方法。

AppendChunk 说明:将数据追加到大型文本、二进制数据 Field 或 Parameter 对象。 语法:object.AppendChunk Data 参数: object Field 或 Parameter 对象 Data 变体型,包含追加到对象中的数据。

相应的,有AppendChunk将二进制存储进数据库,就有GetChunk将二进制读取出来,MSDN有个VB的例子很好的演示了这两个方法,参见 《AppendChunk and GetChunk Methods Example (VB)》

要使用这两个方法就必须创建ADODB.Recordset记录集,记录集在ASP中扮演很重要的角色,刚开始学习ASP时很多讲解都是和记录集有关的,但是其对于简单的SQL操作还是略显麻烦,所以对于简单的SQL操作,在避免SQL注入攻击的前提下还是直接Execute SQL吧。

最后给出个简单的示例:

<%
' conn变量为打开的ADODB.Connection数据库连接对象
' MyBinaryData 为要存储的二进制数据
Set rs = Server.CreateObject("ADODB.Recordset") 
rs.Open "SELECT * FROM pic where id is null",conn,1,3 
rs.AddNew
rs("img").AppendChunk MyBinaryData 
rs.Update 
rs.Close 
set rs=Nothing
%>