RSS
热门关键字:  数据挖掘  人工智能  数据仓库  搜索引擎  数据挖掘导论
当前位置 :| 首页>编程技术>asp编程>

在ASP.NET程序中存储和调用word文件

来源: 作者:unkonwn 时间:2005-07-05 点击:

本文通过一个实例概要讲解如何在ASP.NET程序中配合SQL Server2000进行word文件的存储和调用过程(没有使用VBA )。
数据挖掘研究院


(1)
建立数据库 数据挖掘研究院

首先,我们在数据库中建立一个表,表中有三个字段,fileName(varchar,50)postTime(datetime,8), fileContent(image,16),分别存储文件名称,上传时间和word文件的具体内容,其中fileName为主键。具体的SQL脚本如下: 数据挖掘实验室

CREATE TABLE [dbo].[word] (

       [fileName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,

数据挖掘研究院

       [postTime] [datetime] NOT NULL ,

数据挖掘研究院

       [fileContent] [image] NOT NULL

数据挖掘研究院

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

数据挖掘研究院

 

数据挖掘实验室


(2)
上传并存储word文件 数据挖掘实验室

VS.NET中建立一个ASP.NET web应用程序,在界面内加入如下控件 数据挖掘研究院

控件类型 数据挖掘实验室

ID

数据挖掘研究院

Text

说明

数据挖掘实验室

Label

Label1 数据挖掘研究院

请输入文档的标题

数据挖掘研究院

 

数据挖掘研究院

Label

Label2

请选择具体文档

 

数据挖掘研究院

File Field

数据挖掘研究院

File1 数据挖掘研究院

 

上传控件(要将此HTML控件转化为服务器控件) 数据挖掘研究院

TextBox 数据挖掘研究院

name_TextBox 数据挖掘实验室

  数据挖掘实验室

用于录入文档标题

Button

数据挖掘研究院

Btn_OK

数据挖掘研究院

上传文件

数据挖掘研究院

  数据挖掘实验室

Button

Btn_get

数据挖掘研究院

读取文件 数据挖掘实验室

  数据挖掘研究院

HyperLink

HyperLink1 数据挖掘研究院

打开

数据挖掘研究院

用于打开word文档

数据挖掘研究院

 

数据挖掘研究院

上传文件时首先通过上传控件找到所需上传的文件,然后获取文件的大小,最后以流的形式写入数据库,具体代码为: 数据挖掘研究院

private void Btn_OK_Click(object sender, System.EventArgs e) 数据挖掘实验室

         {

数据挖掘研究院

              string name=name_TextBox.Text;

数据挖掘研究院

            //接收上传文件 数据挖掘研究院

             Stream fileStream=File1.PostedFile.InputStream;  数据挖掘研究院

              //获取上传文件字节的大小 数据挖掘研究院

              int length=File1.PostedFile.ContentLength;  数据挖掘实验室

              byte[] wordData=new byte[length];

数据挖掘实验室

              //从流中读取字节并写入wordData

数据挖掘研究院

              int n=fileStream.Read(wordData,0,length); 数据挖掘研究院

              //获取当前时间 数据挖掘实验室

              DateTime time=DateTime.Now; 数据挖掘研究院

              //连接数据库

数据挖掘研究院

              SqlConnection conn=new SqlConnection(); 数据挖掘研究院

              conn.ConnectionString="workstation id=TIANCHUNZHU;packet size=4096;integrated security=SSPI;data source=TIANCHUNZHU;persist security info=False;initial catalog=test";

              SqlCommand cmd=new SqlCommand();

              cmd.Connection=conn; 数据挖掘研究院

              cmd.CommandText="INSERT INTO word (fileName,postTime,fileContent) values (@fileName,@postTime,@fileContent)";

              SqlParameter nameParam=new SqlParameter("@fileName",System.Data.SqlDbType.VarChar,50); 数据挖掘研究院

              nameParam.Value=name; 数据挖掘研究院

              cmd.Parameters.Add(nameParam); 数据挖掘研究院

              SqlParameter timeParam=new SqlParameter("@postTime",System.Data.SqlDbType.DateTime,8);

数据挖掘研究院

              timeParam.Value=time;

数据挖掘研究院

              cmd.Parameters.Add(timeParam);

//添加word文件

数据挖掘研究院

              SqlParameter contentParam=new SqlParameter("@fileContent",System.Data.SqlDbType.Image); //见本段最后注解

              contentParam.Value=wordData;

数据挖掘研究院

              cmd.Parameters.Add(contentParam);

数据挖掘研究院

              conn.Open();

              cmd.ExecuteNonQuery(); 数据挖掘研究院

              conn.Close();

         }

数据挖掘研究院

  数据挖掘实验室

:此处由于是Image类型文件,事先可能无法预测文件的大小,因此可不必指定size参数。如果希望控制上传文件的大小则可以输入size参数。如指定1000,则上传时最大可以上传1k的word文档。

数据挖掘研究院



3) 从数据库中读取数据并恢复为word文件

数据挖掘研究院

读取数据时先将数据从数据库中读入缓冲区,然后再从缓冲区写入最终文件。因此首先要开辟一个缓冲区并设定它的大小,每当缓冲区读满时就要将缓冲区内的数据写入文件,以清空缓冲区并继续向缓冲区读数据,直到最后一次将缓冲区内剩余的数据全部写入文件,新的word文档即可生成。 数据挖掘研究院

由于这一部分用到了字节流的输入输出操作,因此要引用System.IO命名空间 数据挖掘研究院

下面是关于这一部分的完整代码: 数据挖掘研究院

private void Btn_get_Click(object sender, System.EventArgs e)

{ 数据挖掘研究院

//连接数据库 数据挖掘研究院

              SqlConnection conn=new SqlConnection(); 数据挖掘研究院

              conn.ConnectionString="workstation id=TIANCHUNZHU;packet size=4096;integrated security=SSPI;data source=TIANCHUNZHU;persist security info=False;initial catalog=test";

              SqlCommand cmd=new SqlCommand();

              cmd.Connection=conn; 数据挖掘研究院

            //根据TextBox中指定的文件名进行查找读取 数据挖掘研究院

              cmd.CommandText="select fileContent from word where fileName=""+name_TextBox.Text.ToString()+""";

              FileStream fs; 数据挖掘研究院

              BinaryWriter bw;

数据挖掘研究院

              //设定允许读取到缓冲区的最大长度

数据挖掘研究院

              int buffersize=100;

数据挖掘实验室

              //要将字节流读入的缓冲区

              byte[] outbyte=new byte[buffersize];

数据挖掘实验室

              //用于记录已经读取的字节数

数据挖掘实验室

              long reval; 数据挖掘研究院

              //字段中的索引,从这里开始读取操作 数据挖掘研究院

              long startIndex;

              //FileStream对象将封装的文件的相对路径或绝对路径

              string filePath=@"C:wordData.doc";

数据挖掘实验室

              conn.Open(); 数据挖掘研究院

              SqlDataReader reader;

数据挖掘实验室

              reader=cmd.ExecuteReader(); 数据挖掘研究院

              while (reader.Read()) 数据挖掘研究院

              {

数据挖掘实验室

                   fs=new FileStream(filePath,FileMode.OpenOrCreate,FileAccess.Write); 数据挖掘研究院

                   bw=new BinaryWriter(fs); 

                   startIndex=0; 数据挖掘实验室

                   //将字节流读入outbyte缓冲区中并返回读取的字节数

数据挖掘研究院

                   reval=reader.GetBytes(0,startIndex,outbyte,0,buffersize);

数据挖掘研究院

                   //当读取的字节流达到缓冲区允许的最大长度时要卸载缓冲区内的数据并将数据写入文件 数据挖掘研究院

                   while (reval==buffersize)

                   {

数据挖掘研究院

                       bw.Write(outbyte); 数据挖掘研究院

                       bw.Flush(); 数据挖掘研究院

                       //重新设定开始读取的位置,并继续读取和写数据

数据挖掘研究院

                       startIndex+=buffersize; 数据挖掘研究院

                       reval=reader.GetBytes(0,startIndex,outbyte,0,buffersize);

数据挖掘研究院

                   }

                   //将缓冲区内最后剩余的数据写入文件 数据挖掘研究院

                   bw.Write(outbyte,0,(int)reval-1);

                   bw.Flush();

数据挖掘实验室

                   bw.Close(); 数据挖掘研究院

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
匿名?