在ASP.NET程序中存储和调用word文件(转载)

  

在ASP.NET程序中存储和调用word文件(转载)

本文通过一个实例概要讲解如何在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();

 

                  fs.Close();

 

              }

 

              reader.Close();

 

           conn.Close();

 

}

 

此时将按照filePath中指定的路径和名称重新生成word文档。可以在filePath中根据具体情况指定生成的word文档的名称和路径。

 



4) 打开word文档

 

 在打开word文档这一部分暂时并没有找到通过Button按钮直接打开word的有效办法,但我们可以HyperLink控件,只要将HyperLink控件的NavigateUrl属性指向word文档的物理路径就可以了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、个人在线添加求职简历 2、个在线上传个人相片 3、首页显示最新新闻信息10条(可修改) 4、首页显示最新招聘信息10条(可修改) 5、首页显示最新求职信息10条(可修改) 6、注册用户可在线发送求职/招聘意向邮件 7、企业可发布多条招聘信息 8、企业自己删除招聘信息 9、个人/企业帐号注销 10、首页页尾导航采用数据库形式方便随时更改 11、首页所有广告及链接图片均为数据库形式更新更轻松 12、站内基本信息统计 13、在线人才新闻系统 14、在线政策法规发布系统 15、在线人事代理信息发布系统 16、企业营业执照图片在线上传 17、企业信息和招聘信息独立分开,更便于查看 18、院校用户注册功能(暂不提供) 19、培训机构注册(暂不提供) 20、猎头服务(暂不提供) 21、站内信件群发 22、新闻添加删除 23、政策法规信息添加删除 24、人事代理信息添加删除 25、系统后台管理可直接设置前台广告图片链接版权等信息 26、在线调查系统(以功能在vote.asp 和 votechk.asp页面上,本站没有使用 27、后台清空调查数据 28、招聘信息管理 29、后台管理分三级设置 30、系统管理员拥有所有权限 31、二级管理员可对所有用户及新闻、政策、人事等信息有管理权限 32、三级管理员只拥有新闻、政策、人事等信息的发布删除权 33、站内信件群发 34、首页广告图片后台直接设置,方便更换 35、首页链接及页面标题后台直接设置 36、后台添加管理员,删除管理员 37、后台修改管理员权限 38、站内信息搜索(本程序程序,在search.asp 和 searchs.asp 页面上。)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值