All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
delphi向数据表中添加信息
delphi文本文件类型的使用方法详解
入门:Windows环境下PHP动态网页配置详解_php资料_编程技术
了解ASP2.0向其它网页传递信息的方法_.net资料_编程技术
C#中SplitContainer控件应用实例
PHP入门:在PHP关于变量的使用介绍_[PHP教程]
PHP技巧实例:Smarty+adodb分页示例_php资料_编程技术
C#教程:C#2.0 新特性 迭代器
FreeBSD5.3下安装Apache+PHP+MySQL+Tomcat_[PHP教程]
asp.net2.0母版页与内容页的创建
Reading number is top 10 pictures
Plump, too plump!1
机器人也有性生活吗?
传几朵花
网络游戏与脑残
Beautiful Japanese beauty(漂亮的日本美女)3
夕阳下的北京街道
陪睡门马睿菈自曝写真 称首拍大尺度照片3
西班牙山村小景5
BingBingFan apple dew point photo gallery5
青春清纯美女大集合4
Download software ranking
终极变速大师Speeder3.26
Be there or be square
都市狐狸姑娘传
VeryCD电驴(EasyMule) V1.1.9 Build09081
Ashlynn Video5
C#高级编程(第4版)
Unix video tutorial18
Tram sex maniac 2 (H) rar bag18
Boxer vs Yellow2
The Bermuda triangle3
delv published in(发表于) 2014/1/6 9:02:22 Edit(编辑)
ASP.NET中上传文件到数据库_[Asp.Net教程]

ASP.NET中上传文件到数据库_[Asp.Net教程]

ASP.NET中上传文件到数据库_[Asp.Net教程]

介绍

  为什么要将文件保存到数据库呢?理由很多,最直接的就是,将文件放入数据库以后,可以对文件进行更好的管理,特别是文本文件、图片等,如果不使用数据库,数量巨大的时候,很难做到有效的管理和区别。特别是需要作一些与文字密切相关的应用的时候,将文件全部放入数据库是最好的选择,对文字的处理、检索等,都可以直接利用数据库的一些功能,可以做到真正的有效管理。本文举例主要针对以文字为基础的文件,比如WORD等,但是,实际上对程序稍微修改,就可以上传所有文件类型。

  数据表结构

  现在,我们来看存放文件的数据库表结构,这里,我们给出建立表的标准SQL语句:

  CREATE TABLE tblBooksUpload

  (

  DocID int NOT NULL IDENTITY Primary Key ,

  DocTitle varchar (200) ,

  Doc image,

  DocType varchar (50) ,

  Entrydate datetime Default GetDate()

  )

  以上的语句中,我们看到数据表tblBooksUpload包含五个字段:

  字段DocID是表的关键字段,数据记录编号;

  字段DocTitle是用来简单说明上传文件的,如果上传文本文件,我们一般将其设置为文件标题,图像、程序等,就设置为图像、程序的简单介绍;

  字段Doc是用来存放我们上传的文件的字段,注意,这里将Doc字段的设置为Image类别;

  字段DocType用来保存我们上传文件的类型,可能我们奇怪为什么要这个字段呢?其实,这个字段是很重要的,在用户从数据库取得数据的时候,这个字段将用来指定数据字段Doc中数据的类别,然后,浏览器根据这个字段来决定呈现给用户的数据;

  字段DateTime是一个时间字段,我们可以看到该字段的值取自服务器的当前日期。

  下面是插入数据的存储过程,我们来看具体代码:

  CREATE PROCEDURE uSP_BooksUploadFile

  @Title varchar(200),

  @Doc image,

  @DocType varchar(4)

  AS

  INSERT tblBooksUpload(DocTitle,Doc,DocType)

  VALUES (@Title,@Doc,@DocType)

  GO

  上传文件的步骤

  现在,我们先从文字上了解一下上传文件到数据库的具体步骤,再从代码上来实现:

  首先,从客户端取得上传的文件,然后,我们将它放入数据流;

  第二,服务器端读取数据流,然后将其保存到缓存;

  第三,将缓存数据保存到数据库;

  现在,我们一步步来看怎样在程序中实现这些功能。

  第一步

  当然,首先我们要实现用户在浏览器端自由选择文件,然后上传,这里用户选择文件,当然是要求标准的Windows方式,所以,我们在这里使用Form的File文件组件来给用户选择文件。注意,因为上传文件,所以,在Form的属性设置的时候,我们应该设置为:multipart/form-data,这样,才可以正确上传文件。

下面是上传页面的主要代码:

  

  Title


  

  * Required

  


  


  Docutment to Upload


  

  


  


  

  

  第二步

  我们可以将上传的文件通过数据流保存到缓存,缓存的大小和文件的具体大小相同,我们可以使用以下的代码来取得文件的具体大小:

  int intDocLen = txtFileContents.PostedFile.ContentLength;

  然后,我们可以设置缓存的具体大小了:

  byte[] Docbuffer = new byte[intDoclen];

  这样设置以后,我们可以将上传文件的内容保存到缓存中:

  Stream objStream;

  objStream = txtFileContents.PostedFile.InputStream;

  objStream.Read(Docbuffer,0,intDocLen);

  在以上代码中,读取缓存的时候,从缓存的0位置开始,直到整个文件的长度,其实,这就是整个文件或者整个缓存的大小。

  第三步

  现在我们需要做的就是将缓存数据保存到数据库,我们已经直到数据表结构,这样,我们通过编写简单的SQL语句就可以实现这个功能。在上面的内容中,我们编写了一个存储过程,在程序中,我们只要建立SqlCommand对象并且将这个存储过程传递给它,并设置“@Doc”参数取得缓存数据就可以了:

  cmdUploadDoc = new SqlCommand("uSP_BooksUploadFile",BooksConn);

  cmdUploadDoc.CommandType = CommandType.StoredProcedure;

  cmdUploadDoc.Parameters.Add("@Title ",SqlDbType.VarChar,200);

  cmdUploadDoc.Parameters.Add("@Doc",SqlDbType.Image);

  cmdUploadDoc.Parameters.Add("@DocType",SqlDbType.VarChar,4);

  cmdUploadDoc.Parameters[0].Value = txtTitle.Text;

  cmdUploadDoc.Parameters[1].Value = Docbuffer;

  cmdUploadDoc.Parameters[2].Value = strDocType;

  点击按钮处理代码

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

  {

  string strDocExt;

  //strDocType用于保存上传文件的类型

  string strDocType;

  //用于保存文件大小

  int intDocLen;

  //Stream用于读取上传数据

  Stream objStream;

  SqlConnection BooksConn;

  SqlCommand cmdUploadDoc;

  if(IsValid)

  {

  if(txtFileContents.PostedFile != null)

  {

  //文件类型

  strDocExt = CString.Right

  (txtFileContents.PostedFile.FileName,4).ToLower();

  switch(strDocExt)

 {

  case ".doc":

  strDocType = "doc";

  break;

  case ".ppt":

  strDocType = "ppt";

  break;

  case ".htm":

  strDocType = "htm";

  break;

  case ".html":

  strDocType = "htm";

  break;

  case ".jpg":

  strDocType = "jpg";

  break;

  case ".gif":

  strDocType = "gif";

  break;

  default:

  strDocType = "txt";

  break;

  }

  //上传文件具体内容

  intDocLen = txtFileContents.PostedFile.ContentLength;

  byte[] Docbuffer = new byte[intDocLen];

  objStream = txtFileContents.PostedFile.InputStream;

  //文件保存到缓存

  //缓存将保存到数据库

  objStream.Read(Docbuffer ,0,intDocLen);

  BooksConn = new

  SqlConnection("Server=Server;UID=sa;Database=Books");

  cmdUploadDoc = new

  SqlCommand("uSP_BooksUploadFile",BooksConn);

  cmdUploadDoc.CommandType = CommandType.StoredProcedure;

  cmdUploadDoc.Parameters.Add("@Title ",SqlDbType.VarChar,200);

  cmdUploadDoc.Parameters.Add("@Doc",SqlDbType.Image);

  cmdUploadDoc.Parameters.Add("@DocType",SqlDbType.VarChar,4);

  cmdUploadDoc.Parameters[0].Value = txtTitle.Text;

  cmdUploadDoc.Parameters[1].Value = Docbuffer ;

  cmdUploadDoc.Parameters[2].Value = strDocType;

  BooksConn.Open();

  cmdUploadDoc.ExecuteNonQuery();

  BooksConn.Close();

  }

  }

  }

  总结

  以上我们提到的方法,适合所有类型的文件,对以上代码作适当修改,我们就可以建立一个完全基于数据库的文件管理系统。





添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.