




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于web的文件集成技术在管理信息系统中的应用
近年来,随着计算机技术和网络技术的快速发展,所有主要公司都开始建设新的信息系统(mis)或对现有系统进行升级。管理信息系统一般都有功能强大的后台数据库,这些数据库不但支持结构化数据,而且还可存储各种文档数据。在管理信息系统中,文档资料的存储方式有两种:(1)以文件系统的方式存放在磁盘中,数据库列中存储一个指针(通常是一个统一资源定位器——URL链接)以引用正确的文件;(2)直接将文档资料看作二进制数据块存放在数据库中。第(1)种方式程序编写简单,但安全性不高,磁盘中的文件容易感染病毒或被用户误操作;数据维护比较麻烦,一般要分为两步操作:维护文档的相关信息以及将文档拷贝到服务器的指定目录。第(2)种方式正好相反,程序编写相对来说较困难,且占用了后台数据库系统的资源,但其优势也是明显的:①易于保持与文档相关的其他数据项的同步;②数据的存储方式统一,易于管理;③通过数据库系统,对格式化的基于文本的数据(Word或Excel文档)执行全文本搜索(FTS)操作;④提高系统安全性,也方便了用户的操作。综上所述,这两种方式各有利弊,相比之下第(2)种方式更加科学、合理。1系统总体结构的设计在企业中,文档资料一般都是由特定部门进行统一管理,包括创建、修改、审批、权限控制、删除等操作,而文档的查看则分布在企业各个部门,不同部门、职位的员工查看文档的权限不同。从使用的角度上,企业的文档管理系统可以分为两大模块:文档操作模块和文档浏览模块。(1)文档操作模块要求:安全性高;具有较强的交互性;处理大量数据。其特点是使用范围小,用户办公地点固定,因此,文档操作模块适合采用传统的C/S结构。文档操作模块可以与企业原有的MIS系统整合,作为MIS的一个相对独立的模块存在。(2)文档浏览模块的特点是使用范围广,地点灵活;安全性、交互性要求不高,如果通过传统的基于C/S结构进行设计,实现起来不但不科学,费用也将比较昂贵。因此,对于文档浏览部分,采用基于Web的B/S结构。整个文档管理系统充分利用C/S结构和B/S结构的各自优点,保证了系统的安全性和灵活性。整个系统结构如图1所示。图1的中间部分是企业数据库,是连接文档操作模块和文档浏览模块的枢纽,也是文档数据的存放地。由于各种文档的格式类型不一,在数据库中,文档通常被视为二进制数据块,也称作BLOBs(二进制大对象),如Oracle中为LongRaw类型;在SQLServer中,存储BLOBs的数据格式有Binary,Varbinary和Image。Binary存储固定长度的二进制数据,大小不超过8KB,Varbinary与Binary不同是可变长度。Image存储可变长度字符型数据,大小为0~2GB。由于文档的大小一般都超过8KB,因此,我们一般用Image类型来存储BLOBs。在实际的设计中,通常建立两个表来保存文档数据,一个表保存与文档相关的信息,如文档标题、关键词、创建人等信息,另一个表保存文档内容,两个表通过主外键关联。用户对文档的的操作集中在第一个表,需要操作文档内容的时候,才通过外部键关联第二个表,这是因为第二个表中的BLOBs字段数据量大、读取时间较长。将BLOBs字段存储在独立的表中,将会提高系统的性能。图1中右部分是文档操作模块,它是通过基于C/S结构的应用程序来实现的,其核心功能是实现对存放在数据库的文档内容进行增、删、改的操作,技术难点就是如何高效操作数据库中的大字段。很多高级编程语言都支持大字段的操作,如VC++中的MFC中就有CLongBinary和CByteArray,但大多操作复杂且执行效率不高。在第2节中将介绍一种便捷、高效的方法,它是通过ADO中的Stream对象和Recordset对象,实现数据库中文档的存取。图1中左部分是文档浏览模块,通过Web的浏览方式,局域网内、外用户都可以很方便地查看文档的相关信息,并可以直接从FTP服务器下载文档资料。由于文档的浏览用户可能分布在世界各地,特别是大型企业,通过Web的浏览方式可以说是最佳的选择。当用户向WWW服务器提交查询文档文件信息的请求时,WWW服务器从企业数据库中查询得到相关的文档信息,同时将文档下载到FTP服务器,WWW服务器将文档的相关信息反馈给用户,同时提供了文档下载的FTP地址,用户就可以通过FTP下载文档资料了。文档浏览过程的示意图如图2所示。采用基于数据库C/S结构和B/S结构相结合的系统方案,具有以下优点:①保证敏感数据的安全性,特别是加强了对数据维护的控制;②经济有效地利用企业内部计算机的资源,简化了客户端;③既保证了复杂功能的交互性,又保证了一般功能的易用与统一;④系统维护简便、布局合理、网络效率高。2关键技术和方法的实现2.1ado2.5添加两种形式的驱动ADO(ActiveXDataObjects)是连接应用程序和OLEDB(一套组件对象模型接口,提供对存储在不同信息源进行统一访问)的桥梁。ADO包含的对象有:Connection,Command,Recordset,Record,Stream,其中后两个对象在ADO2.5版本后有,这些对象在数据库操作中担任不同的角色。(1)Connection对象建立与数据源的连接。(2)Command对象定义了将对数据源执行的指定命令。(3)Recordset对象表示的是来自基本表或命令执行结果的记录全集。(4)Record对象表示的是Recordset对象或数据引擎提供的数据的一行,或者是半结构化数据引擎提供的对象,如一个文件或目录。(5)Stream对象表示的是二进制数据或文本的流。2.2文献大小比较Stream对象提供读、写和操作字节流的一种方法,字节流可能是文本或二进制,其大小只受限于系统资源(SQLServer中大小不超过2GB)。Stream对象提供了一组读写文件的方法和属性,现选其中比较重要的方法和属性进行说明。2.2.1重要的妥协方法(1)eam对象的数据来源打开Stream对象来对二进制或文本流的Stream进行操作。参数说明如下:●Source可选,Variant类型,指定Stream对象的数据来源,可以是URL或已打开的Record对象。●Mode可选,ConnectModeEnum(枚举)类型,指定打开方式。●OpenOptions可选,StreamOpenOptionsEnum(枚举)类型。●UserName可选,String类型,访问Stream对象的用户名。●Password可选,String类型,访问Stream对象的密码。(2)将本地文件上传到服务器,寻求本地文件。或在平台上上传本将已经存在的文件的内容装入Stream对象。●FileNameString类型,待装入Stream的UNC格式的文件路径和名称的字符串,如果指定的文件不存在,则触发运行错误。说明:这个方法是用来将文件内容读到Stream对象中,对于上传本地文件到服务器很有用。调用该方法前,Stream对象必须是打开状态。(3)本地数据安全将Stream对象中的二进制内容保存到文件中。●FileNameString类型,Stream对象要导入的文件的路径,可以是本地磁盘,也可以是UNC指定的有访问权限的路径。●SaveOptionsSaveOptionsEnum(枚举)类型,指定文件创建方式。说明:这个方法可以用来拷贝Stream对象中的内容到本地文件。在调用该方法之前,Stream对象必须是打开的。(4)读取指定数量的文本Read是从二进制Stream对象中读取指定字节数的数据;ReadText是从文本Stream对象中读取指定数量的字符串。●NumBytes可选,Long类型,指定读取的字节数;返回已读取的数据,Variant类型。●NumChars可选,Long类型,指定读取的字符数;返回已读取的数据,String类型。(5)文本字符类型Write是给二进制Stream对象写二进制数据;WriteText则是给文本Stream对象写文本字符串。●BufferVariant类型,待写的数据的字节组。●DataString类型,待写的文本字符串。●Options可选,StreamWriteEnum(枚举)类型,表示是否在待写文本字符串后添加行分隔符。(6)邻近关闭一个打开的Stream对象及附属对象,释放相关的系统资源。2.2.2继承对象的重要属性(1)那就有点StreamTypeEnum(枚举)型数据,表示Stream对象中数据类型(二进制还是文本)。(2)小型Long型数据,表示Stream以字节单位的大小,-1表示Stream的大小未知。2.3工艺文档管理系统2.3.1基于数据库的方法在制造企业中有各种各样的文档资料,如工艺图纸文档、结构设计文档等,如何有效管理和控制这些文档资料,直接影响企业研发的效率,因此,大企业都很重视文档资料的管理。一般,文档的维护集中在公司总部,而文档的浏览分布在国内外各研究所、分公司,他们与公司总部的连接主要通过DDN专线方式,少数是通过拨号上网连接。企业内文档数量庞大达数千个甚至上万个,总容量超过1GB。这些文档,还有与其紧密相关的信息,都必须不定期地进行维护和更新。企业原来有一套系统,是基于LotusNotes开发的,以前文档数据量不多,而且访问量较小,基本上能够满足用户的需要。但随着企业规模的迅速发展,文档数量及访问量大幅度增加,导致系统性能急剧下降,必须开发一套高效的文档管理系统以适应企业发展的需求。在充分了解用户需求的基础上,我们采用了基于数据库的C/S结构和B/S结构相结合的解决方案,略有不同的是此系统的WWW服务器和FTP服务器在物理上是同一台机器,同时提供WWW和FTP服务。经实践证明,上述方案是解决此类问题最理想的选择,系统投入使用后,受到用户一致好评。该系统主要由两个模块组成:文档管理模块和文档浏览模块。文档管理模块是在原有的MIS基础上增加的,实现文档资料及相关信息维护、各级领导审批、自动归档等功能,为了和原有的MIS系统的开发平台保持一致,该模块的开发平台是VC++6.0和SQLServer2000。文档浏览模块是新增加的模块,采用Microsoft的最新开发平台VisualStudio.NET,Web服务器的平台是Win2000和InternetInformationServer(5.0)。2.3.2ado的s字段因限于篇幅,本文在此只对一个含有BLOBs字段的简单表进行操作,包括ADO的数据库连接、C/S模式的文档上传和下载、B/S模式的文件下载等关键子模块进行程序说明。(1)[文件保存文件数据假定我们已经在pubs数据库中建立了一个表FileInfo。CREATETABLE[FileInfo]([FileName][nvarchar](255)COLLATEChinesePRCCIASNOTNULL,[FileData][image]NOTNULL)ON[PRIMARY]TEXTIMAGEON[PRIMARY]其中,FileName字段保存文件名称,是表的主键,FileData字段存放文件数据。(2)afxol-gapp调用AfxOleInit()来初始化COM库,通常在CWinApp::InitInstance()的重载函数中完成。示例代码如下:BOOLCFileMagApp::InitInstance(){AfxOleInit();…接着引入ADO类型库,在stdafx.h文件中加入语句实际的编程环境中msado15.dll不一定在这个目录下,按实际情况进行修改。(3)基于ado的sql命令通过ADO的Connection对象建立pubs数据库的连接。利用建立好的数据库连接,通过ADO的Recordset对象执行SQL命令:SELECTFileName,FileDataFROMFileInfo,获得结果记录集mpRecordset。(4)eam对象初始化Stream对象后,我们对文档进行操作,因此将Stream类型设置为二进制,通过Open方法打开Stream对象。StreamPtrpStream=NULL;pStream.CreateInstance(uuidof(Stream));pStream->PutType(adTypeBinary);pStream->Open(vtMissing,adModeUnknown,adOpenStreamUnspecified,bstrt(″″),bstrt(″″));(5)表1:msearchemortgage,maplechs->adaffectell通过Stream对象的LoadFromFile和Read方法,将Client端的文档内容读入Stream对象中,通过Recordset对象将文档内容存入数据库。CFileDialogmfileDlg(TRUE);if(mfileDlg.DoModal()==IDOK){CStringmstrFileName=mfileDlg.GetFileName();CStringmstrPathName=mfileDlg.GetPathName();//将文件的内容读入Stream对象中pStream->LoadFromFile(bstrt(mstrPathName));//增加一行空白记录mpRecordset->AddNew();mpRecordset->Fields->GetItem(variantt(″FileName″))->Value=variantt(mstrFileName);//读取Stream对象中的数据,并给“FileData”字段赋值mpRecordset->Fields->GetItem(variantt(″FileData″))->Value=pStream->Read(adReadAll);//保存新增记录mpRecordset->UpdateBatch(adAffectAll);mpRecordset->putrefActiveConnection(NULL);}(6)pstro统一计算公式通过Stream对象的Write和SaveToFile方法,将保存在数据库中的文档内容保存到Client端临时文件目录下。TCHARmTempPath;GetTempPath(255,mTempPath);CStringmstrFilePath=mTempPath+mstrFileName;pStream->Write(mpRecordset->Fields->GetItem(variantt(″FileData″))->Value);pStream->SaveToFile(bstrt(mstrFilePath),adSaveCreateOverWrite);ADO中对象使用完毕,必须调用Close方法来释放内存。pStream->Close();pStream=NULL;(7)查询结果的生成与C/S模式文件下载模块类似,不同的是在.NET平台上开发。在ADO.NET中,有专门面向SQLServer操作的对象,使得应用程序与SQLServer数据库的操作更加简单。使用FileStream类,将文档内容写入FTP服务器工作目录。C#源代码如下:publicvoidDownLoadFile(stringfpath)//fpath为FTP文件下载目录{stringmstrcon=″server=;database=pubs;UID=sa;PWD=;″;SqlConnectionmyConnection=newSqlConnection(mstrcon);myConnection.Open();//通过SQL语句直接查询stringmstrSQL=″SELECTFileName,FileSize,FileDataFROMFileInfo″;SqlDataAdaptermyCommand=newSqlDataAdaptermstrSQL,myConnection);//将查询结果存放入DataSet中DataSetds=newDataSet();myCommand.Fill(ds);myConnection.Close();//关闭数据库连接//对查询结果进行逐行遍历for(intindex=0;index<dt.Rows.Count;index++){//取出一行记录DataRowdr=dt.Rows[index];longlen=((byte)dr[″FileSize″]).Length;stringfname=fpath+″\″+dr[″FileName″].ToString();/*创建FileStream对象,将“FileData”字段的数据写入FileStream对象*/FileStreamfs=newFileStream(fname,FileMode.Create,FileAccess.Write);fs.Write((byte)dr[″FileD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学校园消防安全教育
- 口腔早期矫正课件
- 毕业设计中期检查
- 2025届河北省正定中学高三下学期第二次模拟考试历史试题(含答案)
- 2025合作协议保险合同样本
- 交通安全主题教育
- 2024-2025统编版道德与法治二年级下册第一单元练习卷及答案
- 2024-2025苏教版科学一年级下册第四单元测试卷及答案
- 2025小学道德与法治教师课标练习卷简答题100题及答案
- 2025高中地理教师课标考试模拟试卷附参考答案
- 小学科学课堂教学设计策略课件
- 中药饮片出库单
- 国开2023春《语言学概论》形考任务1-3+大作业参考答案
- 宿舍楼施工方案方案
- 甲醇-水精馏塔
- 中国话剧史专题知识
- GB/T 15544.1-2023三相交流系统短路电流计算第1部分:电流计算
- GB/T 90.3-2010紧固件质量保证体系
- GB/T 18799-2020家用和类似用途电熨斗性能测试方法
- 科技公司涉密计算机软件安装审批表
- GA/T 1369-2016人员密集场所消防安全评估导则
评论
0/150
提交评论