用ASP.NET实现Office文档的存储与分类显示

一、前言:

二、设计思路

    1. 定义恰当的数据库表结构。

    要实现Office文件的数据库存储必须定义恰当的数据库表结构,该结构有必须包含两种字段,一是能够记录Office文件的文件类型的字段,这样数据还原的时候就可以作为依据进行数据转换;一是有能够存储数据流的字段,该字段必须是Image类型。

    例如建立如下数据库:

数据库名
Test

表名称
test

字段名
字段类型
字段长度
备注

id
int
4
关键字,记录唯一性标记

标题
Varchar
100
Office文档标题

文件类型
Char
3
Office文档类型

主题词
Varchar
100
Office文档检索主题关键字

内容
Image
16
存储Office文档的字段

2. 把Office文件转换成数据流存储到数据库中

定义char类型变量,用以记录该Office文件类型。

定义FileStream类型变量,把Office文件作为数据流进行读取。

定义Byte()数组类型变量,把数据流作为二进制变量存储到该数组中,这样可以对数据库字段进行赋值。

如下代码是把文件转换成数据流存储到数据库中。

‘引用命名空间

Imports System.Data.SqlClient

Imports System.IO

‘设置连接字符串等公共变量

Dim connstr = “User ID=sa;Initial Catalog=test;Password=sa; Data Source=SERVER;”

Dim myconn As New SqlConnection(connstr)

Private Sub Button_save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_save.Click

   Dim sqlstr As String

   Dim filetype as string ‘上传文件类型

   Dim maxid As String ‘用户生成id 码

   Dim myFileStream As FileStream

Dim byteData As Byte()

‘生成关键字id 码

sqlstr = “select max(id) from test “

   myconn.Open()

   Dim mycmd As New SqlCommand(“”, myconn)

   mycmd.CommandText = sqlstr

   If IsDBNull(mycmd.ExecuteScalar()) Then

         maxid = “0”

   Else

         maxid = mycmd.ExecuteScalar()

   End If

If Me.input1.PostedFile.FileName “” Then ‘判断用户是否上传文件

    ‘首先保存非大字段类型的数据

Filetype=right(Me.input1.PostedFile.FileName)

     sqlstr = “insert into test (id,标题,主题词,文件类型) values(‘” & maxid + 1 & “‘,'” & Trim(Me.TextBox_bt.Text) & “‘,'” & Trim(Me.TextBox_ztc.Text) & “‘,'” & Filetype & “‘)”

      mycmd.CommandText = sqlstr

      mycmd.ExecuteNonQuery()

     myconn.Close() ‘关闭数据库连接

     ‘上传文件存储

      sqlstr = “select id,内容 from test where id='” & maxid + 1 & “‘”

      Dim daadp As New SqlDataAdapter(sqlstr, myconn)

      Dim ds As New DataSet()

      Dim sqlBuilder = New SqlCommandBuilder(daadp)

      myconn.Open()

      daadp.Fill(ds, “test”)

      myconn.Close()

      Dim myrow = ds.Tables(“test”).Rows(0) ‘定位数据集记录

      ds.Tables(“test”).DefaultView.AllowEdit = True

      Me.input1.PostedFile.SaveAs(Server.MapPath(“picture.zzz”)) ‘读取文件,转换成数据流

      myFileStream = New FileStream(Server.MapPath(“picture.zzz”), IO.FileMode.Open)

      ReDim byteData(myFileStream.Length – 1)

      myFileStream.Read(byteData, 0, myFileStream.Length)

      myFileStream.Close()

      myrow.item(“内容”) = byteData ‘数据流存储到数据库中

      daadp.Update(ds, “test”)

      myconn.Close()

Else ‘仅保存文本数据

    sqlstr = “insert into test(id,标题,主题词) values(‘” & maxid + 1 & “‘,'” & Trim(Me.TextBox_bt.Text) & “‘,'” & Trim(Me.TextBox_ztc.Text) & “‘)”

   mycmd.CommandText = sqlstr

   mycmd.ExecuteNonQuery()

myconn.Close() ‘关闭连接

End if

Response.Write(““)

End Sub

3. 把数据库中的数据按照原来文档类型转换成相应的Office文件并显示在Web页面中。

在Web页面中定义能够用于显示文件的容器,然后在该容器内调用把数据流转换成Office文件的页面。

在aspx文件html代码中添加一个容器,用来显示Office文件,具体html代码如下:

                   

在把数据流转换成Office文件的文件显示页面内不需要任何控件和多余的html代码,只要按照需求读取数据库内容,根据预先存储的Office文件类型把数据读取出来就可以。

Office文件显示Web窗体设计

?         新建一Web窗体,设计窗体名称为:文件显示. Aspx。

?         该窗体不需要控件,只要把下面源代码与页面html格式替换即可。

页面代码如下:

<%@ import namespace="System.Data" %>

<%@ import namespace="System.Data.SqlClient" %>

http://hi.baidu.com/cghriwkohuemrtr/item/25fd193b9fbb32169dc65e32

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2012年10月13日
下一篇 2012年10月14日

相关推荐