行业网数据库存放二进制.doc
上传人:sy****28 上传时间:2024-09-12 格式:DOC 页数:5 大小:37KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

行业网数据库存放二进制.doc

行业网数据库存放二进制.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

行业网数据库存放二进制数据导致运行缓慢的解决办法名山胡珂ASP全称ActiveServerPages,中文叫做动态服务器网页,是微软公司配合IIS(InternetInformationServer网络信息服务器)提供的一种动态网页实现技术。也就是说可以使用它来开发运行在Windows服务器平台上的动态网页和网站。在ASP的程序设计中,可以使用其自身携带的服务器组件ADO(MicrosoftActiveXDataObjects),通过ODBC(OpenDatabaseConnectivity开放数据库连接)实现与数据库的交互。我单位的网页是几年前用ASP编写的,随着时间推移,数据库日益庞大,网页访问速度越来越慢。经分析,主要原因是:上传的图片、电子表格、Word文挡等均以二进制方式存入数据库中,以致数据库雍肿,读取缓慢。解决办法是:将以二进制方式存入的数据导出到硬盘,重新命名,并用作访问链接保存到数据库中。ADO的Stream对象在数据访问时的使用频率远不如其他三个对象(Connection对象、Command对象和Recordset对象),但是Stream对象提供了一系列属性、方法可以很方便的操作二进制数据流、文本数据流,利用Stream对象批量导出Access中二进制数据就是一个不错的选择。Access数据库db1.mdb,表data,有关字段的描述如下:字段idclassidType1Type2Type3Fname1Fname2Fname3Fj1Fj2Fj3类型自动编号数字文本文本文本文本文本文本oleoleole其中ole指二进制数据,在Access表中是不可见的;Type中存放二进制数据文件类型的描述,共有以下几种:image/pjpeg//图片jpgapplication/msword//word文件docapplication/vnd.ms-excel//excel文件xlsapplication/octet-stream//压缩文件rarFname中存放二进制数据文件名,原来的程序以此为链接访问数据库的二进制数据fj;图片新闻类中所有图片的分类标志classid=61;Type字段和fj字段拟在数据导出和新的文件名存入后删除,如此可以大为减少数据库的存贮空间,使数据库充分瘦身。而Fname字段则转为存贮导入的新文件名。为什么要修改Fname字段的内容呢?这是因为原Fname字段有值相同的情况,也就是说文件有重名的情况。这在原来以此为链接访问数据库中二进制文件时是没有问题的,但现在如不更名,仍按原名导出,因在流文件写入硬盘时须采用覆盖方式,如此就会出现文件丢失的情况。程序实现如下:<%dimiConcStr,iSql,rs,st,k//声明变量iConcStr="Provider=Microsoft.Jet.OLEDB.4.0;PersistSecurityInfo=False"&_";DataSource="&server.mappath("data/db1.mdb")//给出数据库连接参数iSql="select*fromdatawhereclassidid=61"//给出记录集过滤条件setrs=Server.CreateObject("ADODB.Recordset")//建立ADO的Recordset对象rs.OpeniSql,iConcStr,1,3//以读写方式打开记录集whilenotrs.eof//如果记录指针不是末尾setst=Server.CreateObject("adodb.stream")//建立ADO的stream流对象st.Type=1//指定操作对象类型为二进制数据st.Open//打开流对象fork=1to3//循环,从fname1到fname3ifrs("fname"&k)<>""then//如果fname中有数据rs("fname"&k)=rs("id")&"fj"&k&".jpg"//以“当前id值+fj+k值”作为文件名写入数据库//的fname字段覆盖原数据,作为新的文件名st.Write(rs("fj"&k))//将当前fj字段的二进制数据写入流对象stst.SaveToFile"d:\msgs\upfiles\"&rs("id")&"fj"&k&".jpg",2//将流对象st保存到硬盘//指定目录,文件名与写入fname中的一样endif//结束条件语句next//k值+1,继续for循环,k=3执行后结束循环st.close//关闭st流对象rs.movenext//记录指针移到下一条wend//继续while循环,直到记录指针指向末尾rs.Update//使所有记录的修改生效